前言
開發完MCU軟件后,通常都會生成hex文件或者bin文件,用來做固件燒錄或者升級,如果用來做產品開發,就涉及到固件版本的問題,初學者通常采用固件文件重命名來區分版本。
下面介紹如何在程序中加入版本信息,以MDK為例介紹。
實現方式
1.定義一個結構體,里面定義一些軟件版本相關的信息
typedef struct
{
char szVersion[32]; // 軟件版本
char szBuildDate[32]; // 程序編譯日期
char szBuildTime[32]; // 程序編譯時間
}AppInfo_t;
2.定義一個只讀結構體變量(只讀的目的:防止程序改變、節約RAM),賦初值(其中__DATE_
和__TIME__
是C語言中的內置宏,分別是當前的編譯日期和編譯時間)。
const AppInfo_t sg_tAppInfo =
{
"STM32_V0.1.5",
__DATE__,
__TIME__,
};
3.在主函數添加打印,將版本信息輸出到終端上。
int main(void)
{
SystemInit();
printf("Version : %s\\r\\n", sg_tAppInfo.szVersion);
printf("buildTime: %s\\r\\n", sg_tAppInfo.szBuildDate);
printf("buildTime: %s\\r\\n", sg_tAppInfo.szBuildTime);
while (1)
{
}
}
4.在 Keil MDK 中,默認情況下,源文件不修改,只會編譯一次。
如果定于
sg_tAppInfo
變量的源文件沒有修改而其它文件修改時,編譯日期和編譯時間還是之前的
為了編譯版本、日期和時間正確,需要進行設置:總是編譯
5.下載程序后,通過串口工具在MCU上電就能收到版本信息的打印
擴展
從上述的實現方式可知,sg_tAppInfo
只讀變量在程序中的位置不固定,有一定的局限性。
如果結構體有其他的信息,無法在編譯時初始化,而是需要在程序編譯后的hex文件中添加或者修改信息,但由于只讀變量在程序中的位置不固定,不能保證每次編譯后在固定的位置添加或者修改信息。
下一篇介紹通過__attribute__
機制固定sg_tAppInfo
只讀變量在程序中的地址,同時采用映像文件工具對hex固件文件進行操作,自動將固件中的版本信息和固件文件名稱關聯起來。
-
mcu
+關注
關注
146文章
17324瀏覽量
352656 -
HEX文件
+關注
關注
0文章
26瀏覽量
12829 -
BIN文件
+關注
關注
0文章
26瀏覽量
8389
發布評論請先 登錄
相關推薦
華大單片機是如何向MDK中加入頭文件和庫文件的
華大單片機如何向MDK中加入頭文件和庫文件
![華大<b class='flag-5'>單片機</b>如何向MDK<b class='flag-5'>中加入</b>頭文件和庫文件](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
單片機固件中加入版本信息的方法
單片機固件如何加入版本信息
![<b class='flag-5'>單片機</b><b class='flag-5'>固件</b>如何<b class='flag-5'>加入</b><b class='flag-5'>版本</b><b class='flag-5'>信息</b>](https://file1.elecfans.com/web2/M00/94/38/wKgaomTkDOyAO7S1AAAlOLVTPZE321.png)
評論