本文介紹一個小技巧:
使用MDK編譯器,讓STM32程序HEX文件中加入固件版本信息。
代碼
代碼如下:
//------------------------------------------------------------------------------#include 《absacc.h》
//------------------------------------------------------------------------------#define VERINFO_ADDR_BASE (0x8009F00) // 版本信息在FLASH中的存放地址const char Hardware_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x00))) = “Hardware: 1.0.0”;const char Firmware_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x20))) = “Firmware: 1.0.0”;const char Compiler_Date[] __attribute__((at(VERINFO_ADDR_BASE + 0x40))) = “Date: ”__DATE__;const char Compiler_Time[] __attribute__((at(VERINFO_ADDR_BASE + 0x60))) = “Time: ”__TIME__;
//------------------------------------------------------------------------------
寫入到程序中:
選項配置中:Flash地址與大小不用做任何修改!
HEX文件:
串口打印輸出:
上述方法的缺點
上述操作可行, 但是有一個缺點:就是生成的bin文件都是滿flash大小的, 造成每次燒錄都是整個flash讀寫。
其實這個可以把存放地址放到前面,比如偏移1K的地方,都不用改指定地址。
按照上述操作,程序末尾到VERINFO_ADDR_BASE地址這一段會被填充成0x00。根據需要可以修改VERINFO_ADDR_BASE減小地址,或者說不強制指定地址,由編譯器自動分配,但這樣就要去找相應的版本標識字符串了。
優化方法
不想前面這一段被大量填充0x00,讓HEX文件體積小一點的話, 可以把選項配置中Flash的Size改小一點,把VERINFO_ADDR_BASE設置成從FlashSize后面的空間開始,這樣生成的HEX文件就小了,且未用空間就不會被大量填充0x00了。
編輯:JQ
-
FlaSh
+關注
關注
10文章
1642瀏覽量
148683 -
STM32
+關注
關注
2272文章
10924瀏覽量
357599 -
編譯器
+關注
關注
1文章
1642瀏覽量
49289 -
MDK
+關注
關注
4文章
209瀏覽量
32154
原文標題:在SMT32的HEX文件里加入固件版本信息
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論