STM32程序HEX文件中加入固件版本信息

发布时间: 2024-08-29
来源: 电子工程世界

本文介绍一个小技巧:

使用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__;

//------------------------------------------------------------------------------


写入到程序中:

6e20dcc4-1a85-11ed-ba43-dac502259ad0.png

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

6e40773c-1a85-11ed-ba43-dac502259ad0.png

HEX文件:

6e509f22-1a85-11ed-ba43-dac502259ad0.png

串口打印输出:

6e7bee66-1a85-11ed-ba43-dac502259ad0.png

上述方法的缺点

上述操作可行, 但是有一个缺点:就是生成的bin文件都是满Flash大小的, 造成每次烧录都是整个Flash读写。相关文章推荐:STM32单片机中Hex、Bin文件的区别与应用。

其实这个可以把存放地址放到前面,比如偏移1K的地方,都不用改指定地址。

按照上述操作,程序末尾到VERINFO_ADDR_BASE地址这一段会被填充成0x00。根据需要可以修改VERINFO_ADDR_BASE减小地址,或者说不强制指定地址,由编译器自动分配,但这样就要去找相应的版本标识字符串了。

优化方法

不想前面这一段被大量填充0x00,让HEX文件体积小一点的话, 可以把选项配置中Flash的Size改小一点,把VERINFO_ADDR_BASE设置成从FlashSize后面的空间开始,这样生成的HEX文件就小了,且未用空间就不会被大量填充0x00了。

方法如下:

6ea8e3bc-1a85-11ed-ba43-dac502259ad0.png


文章来源于: 电子工程世界 原文链接

本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。