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

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

串口打印输出:

上述方法的缺点
上述操作可行, 但是有一个缺点:就是生成的bin文件都是满flash大小的, 造成每次烧录都是整个flash读写。
其实这个可以把存放地址放到前面,比如偏移1K的地方,都不用改指定地址。
按照上述操作,程序末尾到VERINFO_ADDR_BASE地址这一段会被填充成0x00。根据需要可以修改VERINFO_ADDR_BASE减小地址,或者说不强制指定地址,由编译器自动分配,但这样就要去找相应的版本标识字符串了。
优化方法
不想前面这一段被大量填充0x00,让HEX文件体积小一点的话, 可以把选项配置中Flash的Size改小一点,把VERINFO_ADDR_BASE设置成从FlashSize后面的空间开始,这样生成的HEX文件就小了,且未用空间就不会被大量填充0x00了。
编辑:JQ
-
FlaSh
+关注
关注
10文章
1762浏览量
156125 -
STM32
+关注
关注
2313文章
11210浏览量
375267 -
编译器
+关注
关注
1文章
1673浏览量
52077 -
MDK
+关注
关注
4文章
211浏览量
33772
原文标题:在SMT32的HEX文件里加入固件版本信息
文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
STM32WB 系列微控制器 OTA 和无线固件更新应用笔记
固件版本错配:一个让老工程师都栽过跟头的“低级错误”
开源鸿蒙技术大会2025丨编译器与编程语言分论坛:语言驱动系统创新,编译赋能生态繁荣
GCC编译器,怎么才能实现c文件中未被调用的函数,不会被编译呢?
nano版本使用AC6编译器下,不显示msh怎么解决?
rtt5.0.0下lvgl在正点原子stm32f407探索者开发板V3上mdk编译报错怎么解决?
rt_list_for_each_entry编译失败怎么解决?
rtthread V5.2.1 scons无法编译,MDK编译失败怎么解决?
【RA4E2开发板评测】RACS配置+MDK编程+RA Flash Programmer下载程序测试LED经验分享
求助,关于NanoEdge AI Studio生成的库交叉编译器版本疑问求解
HighTec编译的HEX文件烧录进去开发板时,程序并没有在运行是怎么回事?
边缘设备AI部署:编译器如何实现轻量化与高性能?
兆松科技发布高性能RISC-V编译器ZCC 4.0.0版本
如何使用MDK编译器让STM32程序HEX文件中加入固件版本信息
评论