你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】SMT32的HEX文件里加入固件版本的方法

[复制链接]
STMCU小助手 发布时间:2022-6-9 23:23
    本文介绍一个小技巧:
    使用MDK编译器,让STM32程序HEX文件中加入固件版本信息。
代码
    代码如下:
  1. //------------------------------------------------------------------------------' D: o( D' M2 h% }& z
  2. #include <absacc.h>. a6 K2 \1 J: m- r3 g- C3 N3 J& m
  3. , n7 w- _3 ?2 u4 ]1 ~7 ?. ~
  4. //------------------------------------------------------------------------------. U3 t) v* n  e' N, o& ?1 K& a8 j; b
  5. #define VERINFO_ADDR_BASE   (0x8009F00) // 版本信息在FLASH中的存放地址5 P: h/ K# ?" ~  q
  6. const char Hardware_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x00)))  = "Hardware: 1.0.0";. Q# V0 M, q4 p( h- F
  7. const char Firmware_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x20)))  = "Firmware: 1.0.0";! S0 S( a) r- m$ m( D
  8. const char Compiler_Date[] __attribute__((at(VERINFO_ADDR_BASE + 0x40))) = "Date: "__DATE__;
    ! e- h+ p& g* T1 a% z' p/ b1 D! z) r
  9. const char Compiler_Time[] __attribute__((at(VERINFO_ADDR_BASE + 0x60))) = "Time: "__TIME__;
复制代码
9 Z: w* k* I$ U+ Y1 y" Y$ t" w
    写入到程序中:
: @) M/ ]. P- a. ]
微信图片_20221011192323.png
    选项配置中:Flash地址与大小不用做任何修改!
   微信图片_20221011192045.png

2 z1 A2 C! j4 x4 ~1 i/ g- m

7 V7 r- v' z( W5 F
HEX文件:
微信图片_20221011192048.png
3 o! r+ }8 ^3 s2 d7 M2 s
    串口打印输出:
微信图片_20221011192052.png

1 s0 q/ P. k; c( Y
上述方法的缺点
    上述操作可行, 但是有一个缺点:就是生成的bin文件都是满flash大小的, 造成每次烧录都是整个flash读写。
    其实这个可以把存放地址放到前面,比如偏移1K的地方,都不用改指定地址。
    按照上述操作,程序末尾到VERINFO_ADDR_BASE地址这一段会被填充成0x00。根据需要可以修改VERINFO_ADDR_BASE减小地址,或者说不强制指定地址,由编译器自动分配,但这样就要去找相应的版本标识字符串了。
# G% l, _, n7 z# O7 i. v$ `
优化方法
    不想前面这一段被大量填充0x00,让HEX文件体积小一点的话, 可以把选项配置中Flash的Size改小一点,把VERINFO_ADDR_BASE设置成从FlashSize后面的空间开始,这样生成的HEX文件就小了,且未用空间就不会被大量填充0x00了。
    方法如下:
微信图片_20221011192055.png

& x6 d3 t; k& A/ y5 [- r. n# e
赞 收藏 评论0 发布时间:2022-6-9 23:23

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版