前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个小技巧在SMT32程序HEX文件中加入固件版本信息

一个小技巧在SMT32程序HEX文件中加入固件版本信息

作者头像
MCU起航
发布2020-07-06 12:34:55
6550
发布2020-07-06 12:34:55
举报
文章被收录于专栏:单片机爱好者单片机爱好者

本文内容转自阿莫论坛,作者icode

分享一个小技巧,使用MDK编译器,让STM32程序HEX文件中加入固件版本信息,估计很多老手都已经在使用(你有好的方法欢迎分享,希望我的砖能引来你的玉),该方法献给新手或初学者。

代码如下:

代码语言:javascript
复制
//------------------------------------------------------------------------------
#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文件:

串口打印输出:

xiaomu:

这样可以, 但是有一个缺点,就是生成的bin文件都是满flash大小的, 造成每次烧录都是整个flash读写。

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

icode:

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

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

方法如下:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 单片机爱好者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档