本文介紹一個(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讀寫。
其實(shí)這個(gè)可以把存放地址放到前面,比如偏移1K的地方,都不用改指定地址。
按照上述操作,程序末尾到VERINFO_ADDR_BASE地址這一段會(huì)被填充成0x00。根據(jù)需要可以修改VERINFO_ADDR_BASE減小地址,或者說不強(qiáng)制指定地址,由編譯器自動(dòng)分配,但這樣就要去找相應(yīng)的版本標(biāo)識字符串了。
優(yōu)化方法
不想前面這一段被大量填充0x00,讓HEX文件體積小一點(diǎn)的話, 可以把選項(xiàng)配置中Flash的Size改小一點(diǎn),把VERINFO_ADDR_BASE設(shè)置成從FlashSize后面的空間開始,這樣生成的HEX文件就小了,且未用空間就不會(huì)被大量填充0x00了。
方法如下:
來源:STM32嵌入式開發(fā)
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進(jìn)行處理(聯(lián)系郵箱:cathy@eetrend.com)。
圍觀 49
評論 0
-
程序
+關(guān)注
關(guān)注
117文章
3795瀏覽量
81406 -
編譯器
+關(guān)注
關(guān)注
1文章
1642瀏覽量
49284 -
HEX
+關(guān)注
關(guān)注
0文章
37瀏覽量
16869
發(fā)布評論請先 登錄
相關(guān)推薦
hex格式和二進(jìn)制的區(qū)別
最新的Aduino IDE 2.3.3如何輸出hex文件?
單片機(jī)hex文件反編譯成C語言的過程
hex文件怎么能轉(zhuǎn)回去c語言
hex可以轉(zhuǎn)成源代碼么
hex文件如何查看原c語言代碼
使用CY521 EVAL配置CYPD2122,如何將文件保存為HEX格式?
SMT貼片加工工藝流程,輕松掌握,不再是難題!
使用ESP32的Release/v2.1.0.0版本的AT固件,想升級成自己編譯的AT固件版本,有什么方法可實(shí)現(xiàn)嗎?
怎么加上.bin文件的版本號?
用SMT32手搓5套無人機(jī)飛控,最終決定開源……
![用<b class='flag-5'>SMT32</b>手搓5套無人機(jī)飛控,最終決定開源……](https://file.elecfans.com/web2/M00/43/7B/pYYBAGJ-B6aAHuNPAAAf8J1Ebk4778.jpg)
TSMaster 中 Hex 文件編輯器使用詳細(xì)教程
![TSMaster 中 <b class='flag-5'>Hex</b> <b class='flag-5'>文件</b>編輯器使用詳細(xì)教程](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
評論