本文介紹一個(gè)小技巧:
使用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__;
//------------------------------------------------------------------------------
寫入到程序中:

選項(xiàng)配置中:Flash地址與大小不用做任何修改!
HEX文件:

串口打印輸出:

上述方法的缺點(diǎn)
上述操作可行, 但是有一個(gè)缺點(diǎn):就是生成的bin文件都是滿flash大小的, 造成每次燒錄都是整個(gè)flash讀寫。
其實(shí)這個(gè)可以把存放地址放到前面,比如偏移1K的地方,都不用改指定地址。
按照上述操作,程序末尾到VERINFO_ADDR_BASE地址這一段會(huì)被填充成0x00。根據(jù)需要可以修改VERINFO_ADDR_BASE減小地址,或者說不強(qiáng)制指定地址,由編譯器自動(dòng)分配,但這樣就要去找相應(yīng)的版本標(biāo)識(shí)字符串了。
優(yōu)化方法
不想前面這一段被大量填充0x00,讓HEX文件體積小一點(diǎn)的話, 可以把選項(xiàng)配置中Flash的Size改小一點(diǎn),把VERINFO_ADDR_BASE設(shè)置成從FlashSize后面的空間開始,這樣生成的HEX文件就小了,且未用空間就不會(huì)被大量填充0x00了。
編輯:JQ
-
FlaSh
+關(guān)注
關(guān)注
10文章
1748瀏覽量
155514 -
STM32
+關(guān)注
關(guān)注
2309文章
11162瀏覽量
373415 -
編譯器
+關(guān)注
關(guān)注
1文章
1672瀏覽量
51597 -
MDK
+關(guān)注
關(guān)注
4文章
211瀏覽量
33640
原文標(biāo)題:在SMT32的HEX文件里加入固件版本信息
文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
固件版本錯(cuò)配:一個(gè)讓老工程師都栽過跟頭的“低級(jí)錯(cuò)誤”
nano版本使用AC6編譯器下,不顯示msh怎么解決?
rtt5.0.0下lvgl在正點(diǎn)原子stm32f407探索者開發(fā)板V3上mdk編譯報(bào)錯(cuò)怎么解決?
rt_list_for_each_entry編譯失敗怎么解決?
rtthread V5.2.1 scons無法編譯,MDK編譯失敗怎么解決?
【RA4E2開發(fā)板評(píng)測】RACS配置+MDK編程+RA Flash Programmer下載程序測試LED經(jīng)驗(yàn)分享
求助,關(guān)于NanoEdge AI Studio生成的庫交叉編譯器版本疑問求解
邊緣設(shè)備AI部署:編譯器如何實(shí)現(xiàn)輕量化與高性能?
兆松科技發(fā)布高性能RISC-V編譯器ZCC 4.0.0版本
如何使用MDK編譯器讓STM32程序HEX文件中加入固件版本信息
評(píng)論