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

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

[复制链接]
STMCU-管管 发布时间:2021-6-23 16:59
本文介绍一个小技巧:
) T+ Q, i9 y1 |, w( _8 A* a2 M  {6 @
1 L/ Z- [; J9 @; m$ H/ `

: w9 i8 k% K5 O! C: y  m    使用MDK编译器,让STM32程序HEX文件中加入固件版本信息。
9 f+ T, Y/ K/ }% a2 D' R代码. D9 e4 o8 `: T/ F3 J  t
    代码如下:3 {. l8 H8 m6 `- N& A0 a, P

  1. : \# @- k1 x/ z. N. {" Y
  2. //------------------------------------------------------------------------------" k! H! w; A& h# a- g' f+ l1 ~
  3. #include <absacc.h>0 }# C+ S  _9 x. I( M. g

  4. & i# g; }* @% Q! T
  5. //------------------------------------------------------------------------------
    - E' J) Z$ ]- |! O  }: x6 _8 z
  6. #define VERINFO_ADDR_BASE   (0x8009F00) // 版本信息在FLASH中的存放地址
    * n6 o& J( f% `& E
  7. const char Hardware_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x00)))  = "Hardware: 1.0.0";% b( h# D( D3 q/ A4 V
  8. const char Firmware_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x20)))  = "Firmware: 1.0.0";
    1 B, ]  B! L' j, q
  9. const char Compiler_Date[] __attribute__((at(VERINFO_ADDR_BASE + 0x40))) = "Date: "__DATE__;
    ! ^8 s8 N6 d* U! [5 X3 e
  10. const char Compiler_Time[] __attribute__((at(VERINFO_ADDR_BASE + 0x60))) = "Time: "__TIME__;
    - l* R" x( l: p$ w# j
  11. - j  V1 s$ b8 l& U+ t
  12. //------------------------------------------------------------------------------
复制代码
  写入到程序中:- ?4 m" x* I) i3 S6 V
21.png : U. X- ?- F. f; a
选项配置中:Flash地址与大小不用做任何修改!
" e' L) Q$ U, r3 ]3 U: i" j% K0 p 22.png
5 t$ K. k% u2 o3 f" o   HEX文件:8 _0 K# K4 q& K% B/ X
23.png
0 \: X% a5 [( h" k3 }7 i8 {# J7 p    串口打印输出:) o+ C# F& f! `7 s5 y# _+ o0 ~1 c
24.png
( r, u  j9 J& z* q! }. M# }# f上述方法的缺点
2 L+ j! \6 f9 Y! P7 T7 T1 P2 n% O& X# ^# X

8 L/ B! V# n  s2 e    上述操作可行, 但是有一个缺点:就是生成的bin文件都是满flash大小的, 造成每次烧录都是整个flash读写。
- C3 `& s; W( X    其实这个可以把存放地址放到前面,比如偏移1K的地方,都不用改指定地址。
$ A/ u) G3 ?' Q% K2 U, p' {+ E    按照上述操作,程序末尾到VERINFO_ADDR_BASE地址这一段会被填充成0x00。根据需要可以修改VERINFO_ADDR_BASE减小地址,或者说不强制指定地址,由编译器自动分配,但这样就要去找相应的版本标识字符串了。1 l( ~9 m( r: P
$ S! r+ u7 W' i  W
* V  _8 k" h! \
优化方法( e1 i; }7 M. r5 g2 f

2 ?( a: p* G" t" l% T% s  q

2 W# b0 w+ U! ~0 P  A. y* m    不想前面这一段被大量填充0x00,让HEX文件体积小一点的话, 可以把选项配置中Flash的Size改小一点,把VERINFO_ADDR_BASE设置成从FlashSize后面的空间开始,这样生成的HEX文件就小了,且未用空间就不会被大量填充0x00了。; {/ \( m' M  }1 l1 P+ R$ |
/ R0 Y9 Q: }4 O( x
0 A0 Y# a) r- W0 ~
    方法如下:
7 j9 Z" u6 m7 U& N; X) J: K$ z  d) o4 Y
25.png 9 U* ^" D( O) s2 H! j

5 b' H1 q, [- |+ L5 n
收藏 评论0 发布时间:2021-6-23 16:59

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版