这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 在SMT32的HEX文件里加入固件版本信息

共14条 1/2 1 2 跳转至

在SMT32的HEX文件里加入固件版本信息

高工
2022-03-15 08:07:17     打赏

本文介绍一个小技巧:

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

代码

    代码如下:


//------------------------------------------------------------------------------#include <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__;
//------------------------------------------------------------------------------

    写入到程序中:

image.png

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

image.png

    HEX文件:

image.png

    串口打印输出:

image.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了。

    方法如下:

image.png





关键词: SMT32     固件     版本     信息    

院士
2022-03-15 08:14:47     打赏
2楼

谢谢分享


院士
2022-03-15 08:35:13     打赏
3楼

感谢分享


专家
2022-03-15 08:35:25     打赏
4楼

谢谢分享


专家
2022-03-15 08:40:26     打赏
5楼

谢谢分享


专家
2022-03-15 08:40:38     打赏
6楼

学习


院士
2022-03-15 09:49:41     打赏
7楼

这是一个方法。

但这个方法的局限性太大了。


专家
2022-03-15 11:38:45     打赏
8楼

谢谢分享


高工
2022-03-15 11:59:42     打赏
9楼

看看


专家
2022-03-15 12:22:36     打赏
10楼

学习 学习


共14条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]