首先我们使用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 文件中检验版本号和编译时间。
另外,我们也可以通过通信协议,让上位机从运行的状态中获取固件的编译版本和编译时间。