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

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

[复制链接]
STMCU-管管 发布时间:2021-6-23 16:59
本文介绍一个小技巧:& y9 @" f+ l' X7 n# I4 Q) l! g$ p

1 Y- x& t$ p) c
- @! I$ E+ r. @' B% X, e
    使用MDK编译器,让STM32程序HEX文件中加入固件版本信息。1 S/ M+ y* D8 Z. H8 u
代码; c: T0 A" c) d- F7 h  ~
    代码如下:: j6 K! E  B' c$ m* S/ _+ G3 j
  1. & l% f( Z7 ]) a" Q# M
  2. //------------------------------------------------------------------------------
    & S7 [/ r' n" N
  3. #include <absacc.h>
    + q+ O* q( b* Z) f3 z2 ~
  4. * w: Q' f! L2 v9 i% |! l2 L$ Y
  5. //------------------------------------------------------------------------------9 \/ q$ P/ Z, b
  6. #define VERINFO_ADDR_BASE   (0x8009F00) // 版本信息在FLASH中的存放地址
    ; H3 j& I2 Y3 ]) z
  7. const char Hardware_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x00)))  = "Hardware: 1.0.0";
    # T- c+ V9 ~5 H) c
  8. const char Firmware_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x20)))  = "Firmware: 1.0.0";2 t, L3 l; i3 ~! J4 o' c
  9. const char Compiler_Date[] __attribute__((at(VERINFO_ADDR_BASE + 0x40))) = "Date: "__DATE__;
    3 i( a( K  \' |+ M" @
  10. const char Compiler_Time[] __attribute__((at(VERINFO_ADDR_BASE + 0x60))) = "Time: "__TIME__;
    ; t/ X7 b( F, G: J7 \  S0 O

  11. ( c" x2 u# u& e
  12. //------------------------------------------------------------------------------
复制代码
  写入到程序中:4 ?' e3 _" r; M) O0 q
21.png : N+ c$ @" z3 E9 N) w
选项配置中:Flash地址与大小不用做任何修改!
. Y3 H( ]6 `! Y1 g5 Z! m. | 22.png
- x/ E  W4 A9 [2 j8 w1 M   HEX文件:
! G8 m7 j/ }3 z& e- {1 b 23.png 6 F7 u) J: [! \- {, y  W
    串口打印输出:% m$ T4 y( Y2 \' E
24.png 8 a( ^- H- e/ {7 _5 f8 Q
上述方法的缺点* Q1 H9 B5 j! x) ]+ _" z; h+ B

+ A: h1 W1 t2 B% s. O
7 |  ~4 Z0 b2 A% W3 b4 D
    上述操作可行, 但是有一个缺点:就是生成的bin文件都是满flash大小的, 造成每次烧录都是整个flash读写。8 m+ ~1 i" H! O+ P6 Q- l
    其实这个可以把存放地址放到前面,比如偏移1K的地方,都不用改指定地址。
* O3 p9 K0 j6 H( A    按照上述操作,程序末尾到VERINFO_ADDR_BASE地址这一段会被填充成0x00。根据需要可以修改VERINFO_ADDR_BASE减小地址,或者说不强制指定地址,由编译器自动分配,但这样就要去找相应的版本标识字符串了。& ~; Y/ J  U! M0 ~
' S+ X* i/ Z4 {

$ s9 A0 J/ ?& U, A优化方法
$ x$ `1 B- o. {2 l  R% {& ]+ F+ B

$ X! T1 U: [, w    不想前面这一段被大量填充0x00,让HEX文件体积小一点的话, 可以把选项配置中Flash的Size改小一点,把VERINFO_ADDR_BASE设置成从FlashSize后面的空间开始,这样生成的HEX文件就小了,且未用空间就不会被大量填充0x00了。* P- m( M; Y! L9 z9 O4 s" D& i

8 ~; k7 W* J5 v9 B3 O& s$ T

3 Z7 |& O. O* I+ ]% m    方法如下:+ R* n' v7 j: Z
9 e& t9 i; u: U" m/ B
25.png
1 S  V! T6 u: S7 L' o$ g, c( ^/ O. ~6 p- L. f0 }3 [
收藏 评论0 发布时间:2021-6-23 16:59

举报

0个回答

所属标签

相似分享

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