0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SMT32的HEX文件里加入固件版本的方法

jf_pJlTbmA9 来源:jf_pJlTbmA9 作者:jf_pJlTbmA9 2023-09-18 15:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文介绍一个小技巧:

使用MDK编译器,让STM32程序HEX文件中加入固件版本信息。

代码

代码如下:

//------------------------------------------------------------------------------
#include 

//------------------------------------------------------------------------------
#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__;

//------------------------------------------------------------------------------

写入到程序中:

pYYBAGIB2rCAajdXAAGiQGwH_5I181.png

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

poYBAGIB2rGAPt-4AAJSJGauc0M632.png

HEX文件:

pYYBAGIB2rOAH1YFAAFSe2uzrSA694.png

串口打印输出:

poYBAGIB2rSAXPpzAAEGJueLs7M335.png

上述方法的缺点

上述操作可行, 但是有一个缺点:就是生成的bin文件都是满flash大小的, 造成每次烧录都是整个flash读写。

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

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

优化方法

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

方法如下:

pYYBAGIB2reAZnv-AAbHsQk41is233.png

来源:STM32嵌入式开发
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 49

评论 0

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序
    +关注

    关注

    117

    文章

    3836

    浏览量

    84762
  • 编译器
    +关注

    关注

    1

    文章

    1669

    浏览量

    51081
  • HEX
    HEX
    +关注

    关注

    0

    文章

    37

    浏览量

    17369
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Bootloader固件升级的步骤

    ,也可以不更新,在项目中,我们通常会对 FW 版本号进行对比,会将 MCU 中的 App 程序更新最新的版本,起到固件升级的效果。更新的话,BootLoader 更新完程序后,跳转到新程序运行;不更新
    发表于 11-19 07:41

    往flash里面烧写的是.elf文件还是.hex文件?裸机应该没办法识别.elf文件

    往flash里面烧写的是.elf文件还是.hex文件?裸机应该没办法识别.elf文件吧?
    发表于 11-05 07:02

    rtt连接ESP8266报错(AT+CIPDNS_CUR?),固件版本为2.3.0.0,是什么原因导致的?

    不知道我这个固件版本挺新的,为什么不支持报错(AT+CIPDNS_CUR?) 大佬们那个固件版本支持AT+CIPDNS_CUR?的,可以给我一个支持(AT+CIPDNS_CUR?)的
    发表于 09-12 07:21

    SMT32 TP Tool Windows无法安装驱动怎么处理?

    新手小白,SMT32 TP Tool Windows无法安装驱动怎么处理
    发表于 06-06 06:52

    有办法使用HPI读取CYPD3177固件版本吗?

    有办法使用 HPI 读取 CYPD3177 固件版本吗? 我们现场有日期代码在 2047 年之前和之后的 CYPD3177 设备。 我们无法查看这些设备的内部,也无法读取日期代码。 固件版本
    发表于 05-21 07:41

    为什么无法在USB控制中心选择固件映像文件

    EEPROM 时,USB 控制中心不会弹出图像选择窗口,而是自动下载固件的先前版本。 由于这个问题,我无法将我新开发的固件映像文件下载到 FX3。 即使我重命名以前的
    发表于 05-07 06:14

    新手小白,SMT32 TP Tool Windows无法安装驱动怎么处理?

    SMT32 TP Tool Windows无法安装驱动怎么处理
    发表于 04-27 08:06

    新手小白,SMT32 TP Tool Windows无法安装驱动怎么处理?

    新手小白,SMT32 TP Tool Windows无法安装驱动怎么处理
    发表于 04-25 07:24

    如何使用.hex进行远程更新文件

    使用 .hex 进行远程更新 文件
    发表于 04-21 06:53

    SMT加工虚焊大揭秘:判断与解决方法全攻略

    一站式PCBA智造厂家今天为大家讲讲SMT加工虚焊的判断与解决方法有哪些?SMT加工虚焊的判断与解决方法。在电子制造过程中,SMT贴片加工是
    的头像 发表于 03-18 09:34 1276次阅读

    STM32使用ISp烧录HEX文件运行,代码重新编译之后的产生的新hex文件选择全片擦除就没办法正常运行,为什么?

    我有一套代码需要使用ISp烧录HEX文件运行,代码有一个老的HEX,无论是全片擦除还是擦除重要部分再下载都没有问题。但是代码重新编译之后的产生的新hex
    发表于 03-10 07:42

    Linux固件烧写中的陷阱:文件系统异步写入引发的问题

    在工业生产中,固件烧写是确保产品正常运行的关键环节。本文通过一个实际案例,揭示了Linux系统下因文件写入异步性导致的固件烧写不完全问题。客户案例客户产线上批量生产时,用SD卡进行固件
    的头像 发表于 03-07 11:34 639次阅读
    Linux<b class='flag-5'>固件</b>烧写中的陷阱:<b class='flag-5'>文件</b>系统异步写入引发的问题

    stm32cubeide编译的时候报错,无法生成hex文件怎么解决?

    stm32cubeide编译的时候报错,并且无法生成hex文件怎么办急急急!
    发表于 03-07 08:17

    请问DLP3010的固件文件如何修改?

    请问有关于固件文件修改的详细文档吗?我在修改完固件后点击finish,就会出现以下错误码,请问这个错误码代表什么错误?要怎么解决?
    发表于 02-19 07:51

    DLP3432适配的外挂Flash芯片的固件如何烧录呢?

    你好,新制作的DLP3432 PCB板子,它适配的外挂Flash芯片的固件如何烧录呢?官网给出的固件是.img 文件,而一般的Flash 编程器只支持 hex或者bin
    发表于 02-18 08:19