C语言中连字符“#”的使用,输出固件的编译时间和版本号

首先我们使用C语言宏定义和“#”来组合字符串

#define MAINVER   2#define SUBVER1 0#define SUBVER2   1#define STR(s) #s#define VERSION(a,b,c) "System V" STR(a) "." STR(b) "." STR(c) " "__DATE__

然后我们在全局变量中定义一个存储信息的字符串,这个使用 const 修饰可以存在flash中,也可以通过__attribute__((at(0x081F8010)))这样的形式来把常量存储到 Flash 的固定位置。

//定义全局版本号的字符串变量,也可以放到一个固定的地址const char g_version[] = VERSION(MAINVER,SUBVER1,SUBVER2);
int32_t main(void){        LOG_INFO("==== BMS System Init OK ====\r\n");        LOG_INFO("%s\r\n",g_version);}

使用 RTT打印输出结果如下:

图片

这里我们也可以 g_version这个变量重定向到一个固定地址,以便于使用上位机可以直接从 bin 文件或者hex 文件中检验版本号和编译时间。

另外,我们也可以通过通信协议,让上位机从运行的状态中获取固件的编译版本和编译时间。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/776153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器硬件

目录 服务器CPU服务器GPU服务器内存服务器硬盘服务器主板散热系统(服务器风扇)服务器电源(电影供应器)其他网络适配器扩展卡 服务器CPU 基于架构的分类:根据CPU的架构不同,可以分为x86架构(如I…

API接口鉴权签名设计

在设计API接口的鉴权签名时,通常会使用一种加密算法来生成签名,以确保请求的合法性和安全性。以下是通过鉴权签名的设计方案。 1、接口秘钥设置 Key:123 Secret:abc 2、接口Url 接口Url需要使用https的协议保证接口数据安全传输 3、请求参数 3.1、…

VsCode的json文件不允许注释的解决办法

右下角找到注释点进去 输入Files: Associations搜索出此项 改为项为*.json值为jsonc保存即可 然后会发现VsCode的json文件就允许注释了

哈工大 sse C语言 困难

Q1892.(10分数, 语言: C)Two Bags of Potatoes time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard output Valera had two bags of potatoes, the first of these bags contains x (x≥1) potatoes, and the second — y (y…

RAG进阶笔记:RAG进阶

1 查询/索引部分 1.1 层次索引 创建两个索引——一个由摘要组成,另一个由文档块组成分两步进行搜索:首先通过摘要过滤出相关文档,接着只在这个相关群体内进行搜索 1.2 假设性问题 让LLM为每个块生成一个假设性问题,并将这些问…

SQL104 返回产品名称和每一项产品的总订单数(left join..on.. ,group by)

select prod_name,count(order_num) as orders from Products P left join OrderItems OI on OI.prod_id P.prod_id group by prod_name order by prod_name;left join一个数据条多的表 count(order_num),group by 另一个字段

C/C++ 各种编译器平台判断,返回对应平台CPU缩写符

参考以下实现,MIPS、ARM、RISV64、X86、X86_64、M68K、S390X、MIPS64、PPC64、LONGARCH32、LONGARCH64等。 const char* GetPlatformCode() noexcept { #if defined(__x86_64__) || defined(_M_X64)return "X86_64"; #elif defined(i386) || defined(__i3…

openEuler 22.03 安装 .NET 8.0

openEuler 22.03 安装 .NET 8.0 openEuler 22.03 安装 .NET 8.0 openEuler 22.03 安装 .NET 8.0 查看内核信息 [jeffPC-20240314EIAA ~]$ cat /proc/version Linux version 5.15.146.1-microsoft-standard-WSL2 (root65c757a075e2) (gcc (GCC) 11.2.0, GNU ld (GNU Binutils)…

ArkTS 的基本语法

ArkTS 的基本语法 ArkTS 是鸿蒙生态的应用开发语言。它在保持 TypeScript(简称 TS)基本语法风格的基础上,对 TS 的动态类型特性施加更严格的约束,引入静态类型。同时,提供了声明式 UI、状态管理等相应的能力&#xff…

全志R128 SDK HAL 模块开发指南——GPADC

GPADC 模块介绍 GPADC 是 12bit 采集精度的模数转换模块,支持 4 路通道,模拟输入范围 0-1.8v,最高采样率 1MHZ,并且支持数据比较,自校验功能,同时工作于可配置的四种工作模式: Single mode&a…

科学高效备考2024年汉字小达人:历年真题详细解析-古诗文专题10

距离2024年第11届汉字小达人比赛还有七个多月的时间,如何利用这段时间有条不紊地备考呢?我的建议是两手准备:①把小学1-5年级的语文课本上的知识点熟悉,重点是字、词、成语、古诗。阅读理解不需要。②把历年真题刷刷熟&#xff0c…

JAVA的sort用法详解(二维数组排序,List<>排序,lambada表达式,自定义类型排序)

目录 前言&#xff1a; 一维数组降序&#xff1a; 方法1.Comparator接口&#xff1a; 代码实现&#xff1a; 方法2.Collections.reverseOrder()&#xff1a; 代码实现&#xff1a; 二维数组排序&#xff1a; 代码如下&#xff1a; List<>排序&#xff1a; 代码…

Ansible-1

Ansible是一款自动化运维、批量管理服务器的工具&#xff0c;批量系统配置、程序部署、运行命令等功能。基于Python开发&#xff0c;基于ssh进行管理&#xff0c;不需要在被管理端安装任何软件。Ansible在管理远程主机的时候&#xff0c;只有是通过各种模块进行操作的。 需要关…

Linux 注入依赖环境

文章目录 配置依赖程序安装 JDK安装 Tomcat安装 mysql 配置依赖程序 下面配置依赖程序都以CentOS为例。 安装 JDK 可以直接使用 yum(CentOS) 直接进行安装。 先搜索&#xff0c;确定软件包的完整名称。 yum list | grep jdk再进行安装 进行安装的时候一定要先确保处在“管理…

【详细讲解React 快速入门教程】

&#x1f525;博主&#xff1a;程序员不想YY啊&#x1f525; &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f4ab; &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 &#x1f308;希望本文对您有所裨益&#xff0c;如有…

【C语言】strcmp 的使⽤和模拟实现

前言 这篇文章将要带我们去实现模拟一个strcmp函数 首先我们要知道strcmp函数的定义 strcmp()定义和用法 我们先看一下strcmp在cplusplus网站中的定义 链接: link int strcmp ( const char * str1, const char * str2 );比较两个字符串将 C 字符串 str1 与 C 字符串 str2 …

Java Stream API之reduce方法详解

Java 8引入的Stream API为Java开发者带来了函数式编程的风格&#xff0c;使得数据处理变得更加简洁和高效。在这众多的流操作中&#xff0c;reduce()方法是一个非常强大且灵活的工具&#xff0c;它可以将流中的元素组合起来&#xff0c;生成单一的汇总结果。本文旨在深入探讨re…

ajaxpro CVE-2021-23758 漏洞记录

1. 一般出现在asp.net的站点 打开页面&#xff0c;源代码会看到 类似/ajaxpro/gust_search,wlms.ashx路径 如果有源代码的话&#xff0c;copy aspx all.txt 去掉分号中间空格批量请求。 2. ajaxpro组件存在CVE-2021-23758漏洞&#xff0c;标有属性[AjaxPro.AjaxMethod]或[A…

openssl AF_ALG引擎使用

cmd AF_ALG是Linux提供的一种虚拟接口&#xff0c;用于访问内核中的加密算法。在Linux中&#xff0c;可以使用AF_ALG接口配合加密算法框架&#xff08;Crypto API&#xff09;来进行加密操作。 以下是一个使用AF_ALG和openssl进行加密操作的例子&#xff1a; # 加密 openssl…

C++ 内存泄漏-原因、避免、定位

大家好&#xff01;作为C/C开发人员&#xff0c;内存泄漏是最容易遇到的问题之一&#xff0c;这是由C/C语言的特性引起的。C/C语言与其他语言不同&#xff0c;需要开发者去申请和释放内存&#xff0c;即需要开发者去管理内存&#xff0c;如果内存使用不当&#xff0c;就容易造成…