本文介紹一個(gè)小技巧:
使用MDK編譯器,讓STM32程序HEX文件中加入固件版本信息。
代碼
代碼如下:
//------------------------------------------------------------------------------ #include//------------------------------------------------------------------------------ #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讀寫。相關(guān)文章:詳解STM32在線IAP升級。
其實(shí)這個(gè)可以把存放地址放到前面,比如偏移1K的地方,都不用改指定地址。
按照上述操作,程序末尾到VERINFO_ADDR_BASE地址這一段會被填充成0x00。根據(jù)需要可以修改VERINFO_ADDR_BASE減小地址,或者說不強(qiáng)制指定地址,由編譯器自動分配,但這樣就要去找相應(yīng)的版本標(biāo)識字符串了。
優(yōu)化方法
不想前面這一段被大量填充0x00,讓HEX文件體積小一點(diǎn)的話, 可以把選項(xiàng)配置中Flash的Size改小一點(diǎn),把VERINFO_ADDR_BASE設(shè)置成從FlashSize后面的空間開始,這樣生成的HEX文件就小了,且未用空間就不會被大量填充0x00了。
方法如下:
審核編輯:湯梓紅
-
STM32
+關(guān)注
關(guān)注
2292文章
11029瀏覽量
364081 -
HEX文件
+關(guān)注
關(guān)注
0文章
26瀏覽量
13148 -
編譯器
+關(guān)注
關(guān)注
1文章
1661瀏覽量
50137 -
MDK
+關(guān)注
關(guān)注
4文章
211瀏覽量
32634 -
HEX
+關(guān)注
關(guān)注
0文章
37瀏覽量
17122
原文標(biāo)題:SMT32的HEX文件里加入固件版本的方法
文章出處:【微信號:EE時(shí)間,微信公眾號:EE時(shí)間】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
新手小白,SMT32 TP Tool Windows無法安裝驅(qū)動怎么處理?
smt32做一個(gè)解魔方的機(jī)器人,需用到哪些知識
DSP生成hex文件和生成bin文件方法步驟
基于SMT32的數(shù)碼管顯示程序
怎樣去創(chuàng)建并使用SMT32定時(shí)器中斷的
SMT32定時(shí)器的輸入捕獲是什么意思?其工作流程是怎樣的
怎樣去解決在RK2928燒錄固件里加入Demo文件的問題呢
bin文件轉(zhuǎn)換為hex文件操作步驟解析

評論