本文介绍一个小技巧:
使用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__; //------------------------------------------------------------------------------
写入到程序中:

选项配置中:Flash地址与大小不用做任何修改!

HEX文件:

串口打印输出:

上述方法的缺点
上述操作可行, 但是有一个缺点:就是生成的bin文件都是满flash大小的, 造成每次烧录都是整个flash读写。相关文章:详解STM32在线IAP升级。
其实这个可以把存放地址放到前面,比如偏移1K的地方,都不用改指定地址。
按照上述操作,程序末尾到VERINFO_ADDR_BASE地址这一段会被填充成0x00。根据需要可以修改VERINFO_ADDR_BASE减小地址,或者说不强制指定地址,由编译器自动分配,但这样就要去找相应的版本标识字符串了。
优化方法
不想前面这一段被大量填充0x00,让HEX文件体积小一点的话, 可以把选项配置中Flash的Size改小一点,把VERINFO_ADDR_BASE设置成从FlashSize后面的空间开始,这样生成的HEX文件就小了,且未用空间就不会被大量填充0x00了。
方法如下:

审核编辑:汤梓红
-
STM32
+关注
关注
2305文章
11120浏览量
371052 -
HEX文件
+关注
关注
0文章
26浏览量
13365 -
编译器
+关注
关注
1文章
1669浏览量
51069 -
MDK
+关注
关注
4文章
211浏览量
33455 -
HEX
+关注
关注
0文章
37浏览量
17366
原文标题:SMT32的HEX文件里加入固件版本的方法
文章出处:【微信号:EE时间,微信公众号:EE时间】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
DSP生成hex文件和生成bin文件方法步骤
基于SMT32的数码管显示程序
SMT32定时器的输入捕获是什么意思?其工作流程是怎样的
怎样去解决在RK2928烧录固件里加入Demo文件的问题呢
bin文件转换为hex文件操作步骤解析

SMT32的HEX文件里加入固件版本的方法
评论