跳转到主要内容

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

本文介绍一个小技巧:

使用MDK编译器,让STM32程序HEX文件中加入固件版本信息。

<strong><font color="#004a85">代码</font> </strong>

代码如下:

<pre style="overflow-x:auto; background-color:#e9e9e9;">//------------------------------------------------------------------------------
#include &lt;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__;

//------------------------------------------------------------------------------</pre>

写入到程序中:

<center><img src="http://mcu.eetrend.com/files/2021-08/wen_zhang_/100553152-218087-1.png&…; alt=“SMT32的HEX文件里加入固件版本的方法"></center>

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

<center><img src="http://mcu.eetrend.com/files/2021-08/wen_zhang_/100553152-218088-2.png&…; alt=“SMT32的HEX文件里加入固件版本的方法"></center>

HEX文件:

<center><img src="http://mcu.eetrend.com/files/2021-08/wen_zhang_/100553152-218089-3.png&…; alt=“SMT32的HEX文件里加入固件版本的方法"></center>

串口打印输出:

<center><img src="http://mcu.eetrend.com/files/2021-08/wen_zhang_/100553152-218090-4.png&…; alt=“SMT32的HEX文件里加入固件版本的方法"></center>

<strong><font color="#004a85">上述方法的缺点</font> </strong>

上述操作可行, 但是有一个缺点:就是生成的bin文件都是满flash大小的, 造成每次烧录都是整个flash读写。

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

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

<strong><font color="#004a85">优化方法</font> </strong>

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

方法如下:

<center><img src="http://mcu.eetrend.com/files/2021-08/wen_zhang_/100553152-218091-5.png&…; alt=“SMT32的HEX文件里加入固件版本的方法"></center>

来源:<a href="https://mp.weixin.qq.com/s/Muh-t1Ey-6MMwM9HuzhehQ">STM32嵌入式开发</a&gt;
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。