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

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

3天内不再提示

STM32程序HEX文件中加入固件版本信息

lhl545545 来源:单片机与嵌入式 作者:单片机与嵌入式 2022-08-14 16:13 次阅读

本文介绍一个小技巧:

使用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__;
//------------------------------------------------------------------------------

写入到程序中:

6e20dcc4-1a85-11ed-ba43-dac502259ad0.png

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

6e40773c-1a85-11ed-ba43-dac502259ad0.png

HEX文件:

6e509f22-1a85-11ed-ba43-dac502259ad0.png

串口打印输出:

6e7bee66-1a85-11ed-ba43-dac502259ad0.png

上述方法的缺点

上述操作可行, 但是有一个缺点:就是生成的bin文件都是满Flash大小的, 造成每次烧录都是整个Flash读写。相关文章推荐:STM32单片机中Hex、Bin文件的区别与应用。

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

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

优化方法

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

方法如下:

6ea8e3bc-1a85-11ed-ba43-dac502259ad0.png

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

    关注

    1

    文章

    540

    浏览量

    24400
  • 代码
    +关注

    关注

    30

    文章

    4554

    浏览量

    66736
  • STM32程序
    +关注

    关注

    1

    文章

    2

    浏览量

    1188

原文标题:在SMT32的HEX文件里加入固件版本信息

文章出处:【微信号:单片机与嵌入式,微信公众号:单片机与嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32单片机生成的hex文件与bin文件区别与应用

    调试单片机程序时,通常下载的是Hex文件。由于在Hex文件中已经包含了地址信息,在上述下载步骤中
    的头像 发表于 01-03 11:06 5980次阅读

    stm32之.hex 文件

    的output文件夹中找到编译后生产的. hex 文件; 用 notepad++ 或者 UltraEdit 打开 程序 的.hex
    发表于 04-20 09:28 3752次阅读
    <b class='flag-5'>stm32</b>之.<b class='flag-5'>hex</b> <b class='flag-5'>文件</b>

    使用Keil下载Hex文件STM32

    初学STM32时,是通过串口1把Hex文件下载进STM32的,需要一个串口模块,而且还要设置BOOT0和BOOT1电平,然后通过FlyMcu软件进行下载,这也是一种不错的方法,这里我要
    发表于 09-07 10:22 7710次阅读
    使用Keil下载<b class='flag-5'>Hex</b><b class='flag-5'>文件</b>进<b class='flag-5'>STM32</b>

    用于STM32hex文件合并的应用程序免费下载

    本文档的主要内容详细介绍的是用于STM32hex文件合并的应用程序免费下载。
    发表于 03-05 08:00 11次下载

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

    本文介绍一个小技巧: 使用MDK编译器,让STM32程序HEX文件中加入固件
    的头像 发表于 06-23 15:14 3586次阅读
    如何使用MDK编译器让<b class='flag-5'>STM32</b><b class='flag-5'>程序</b><b class='flag-5'>HEX</b><b class='flag-5'>文件</b><b class='flag-5'>中加入</b><b class='flag-5'>固件</b><b class='flag-5'>版本</b><b class='flag-5'>信息</b>

    stm32程序升级SD卡读取hex文件写入flash

    stm32程序升级SD卡读取hex文件写入flash
    发表于 11-20 12:36 52次下载
    <b class='flag-5'>stm32</b><b class='flag-5'>程序</b>升级SD卡读取<b class='flag-5'>hex</b><b class='flag-5'>文件</b>写入flash

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

    本文介绍一个小技巧:使用MDK编译器,让STM32程序HEX文件中加入固件
    发表于 02-08 15:28 0次下载
    SMT32的<b class='flag-5'>HEX</b><b class='flag-5'>文件</b>里<b class='flag-5'>加入</b><b class='flag-5'>固件</b><b class='flag-5'>版本</b>的方法

    单片机固件中加入版本信息的方法

    平时我们写程序,通常都会备注软件版本,那么,怎么在单片机中保存版本信息呢?方法其实有很多,但基本原理都是在指定存储区域(Flash)中写入软件版本
    的头像 发表于 04-18 14:50 916次阅读

    STM32单片机中Hex、Bin文件的区别及应用详解

        STM32、51等单片机程序经过编译后,生成的hex文件、bin文件,它们都是单片机烧写文件
    的头像 发表于 07-05 17:23 1w次阅读

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

    使用MDK编译器,让STM32程序HEX文件中加入固件版本
    的头像 发表于 02-01 09:37 3522次阅读

    单片机固件中加入版本信息的方式有哪些?-1

    开发完MCU软件后,通常都会生成hex文件或者bin文件,用来做固件烧录或者升级,如果用来做产品开发,就涉及到固件
    的头像 发表于 02-15 15:13 987次阅读
    单片机<b class='flag-5'>固件</b><b class='flag-5'>中加入</b><b class='flag-5'>版本</b><b class='flag-5'>信息</b>的方式有哪些?-1

    单片机固件中加入版本信息的方式有哪些?-2

    这篇介绍一下如何在 MCU 程序中固定位置添加程序版本信息等。
    的头像 发表于 02-15 15:36 723次阅读
    单片机<b class='flag-5'>固件</b><b class='flag-5'>中加入</b><b class='flag-5'>版本</b><b class='flag-5'>信息</b>的方式有哪些?-2

    单片机固件中加入版本信息的方式有哪些?-3

    这篇主要介绍一下通过 Git 工具管理的程序如何在 MCU 程序版本信息中增加 Git commot 提交的 id 。
    的头像 发表于 02-15 15:38 431次阅读
    单片机<b class='flag-5'>固件</b><b class='flag-5'>中加入</b><b class='flag-5'>版本</b><b class='flag-5'>信息</b>的方式有哪些?-3

    单片机固件如何加入版本信息

    时我们写程序,通常都会备注软件版本,那么,怎么在单片机中保存版本信息呢? 方法其实有很多,但基本原理都是在指定存储区域(Flash)中写入软件版本
    发表于 08-22 09:16 195次阅读
    单片机<b class='flag-5'>固件</b>如何<b class='flag-5'>加入</b><b class='flag-5'>版本</b><b class='flag-5'>信息</b>

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

    SMT32的HEX文件加入固件版本的方法
    的头像 发表于 09-18 15:34 400次阅读
    SMT32的<b class='flag-5'>HEX</b><b class='flag-5'>文件</b>里<b class='flag-5'>加入</b><b class='flag-5'>固件</b><b class='flag-5'>版本</b>的方法