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

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

3天内不再提示

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

STM32嵌入式开发 来源:阿莫论坛 作者:阿莫icode 2021-06-23 15:14 次阅读

本文介绍一个小技巧:

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

代码

代码如下:

//------------------------------------------------------------------------------#include 《absacc.h》

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

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

写入到程序中:

3e69fdb6-d3dd-11eb-9e57-12bb97331649.png

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

HEX文件:

3e83c7d2-d3dd-11eb-9e57-12bb97331649.png

串口打印输出:

3e993680-d3dd-11eb-9e57-12bb97331649.png

上述方法的缺点

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

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

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

优化方法

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

编辑:JQ

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

    关注

    9

    文章

    1404

    浏览量

    146199
  • STM32
    +关注

    关注

    2190

    文章

    10022

    浏览量

    344964
  • 编译器
    +关注

    关注

    1

    文章

    1435

    浏览量

    48236
  • MDK
    MDK
    +关注

    关注

    4

    文章

    201

    浏览量

    31588
收藏 人收藏

    评论

    相关推荐

    如何利用MDK完成一个STM32汇编程序的编写

    MDK5.25版本,完成对于STM32程序的编写文章目录一、新建项目1.选择开发环境2.新建工程二、编译调试1.编译程序2.调试程序三、HEX文件说明1.hex文件2.
    发表于 12-01 06:36

    ASM源文件编译器软件免费下载

    文件编译器软件免费下载。适用于32位计算机,asm编译器,将ASM51.exe放在同一目录,在dos状态编译 如; d:asm51.exe ***.ASM{注意要空格}直接生成hex烧录
    发表于 08-07 08:00 5次下载
    ASM源<b>文件</b><b>编译器</b>软件免费下载

    成功实现MDK自动生成hex文件的crc值并附加到hex文件末尾(bin也支持),然后跟STM32的硬件CRC计算值做比较

    MDK自动生成hex文件的crc值并附加到hex文件末尾(bin也支持),然后跟STM32的硬件CRC计算值做比较
    发表于 11-20 13:36 26次下载
    成功实现<b>MDK</b>自动生成<b>hex</b><b>文件</b>的crc值并附加到<b>hex</b><b>文件</b>末尾(bin也支持),然后跟<b>STM32</b>的硬件CRC计算值做比较

    配置Keil嵌入式开发环境并基于MDK完成一个STM32汇编程序的编写

    MDK5.25版本,完成对于STM32程序的编写文章目录一、新建项目1.选择开发环境2.新建工程二、编译调试1.编译程序2.调试程序三、HEX文件说明1.hex文件2.
    发表于 11-22 11:21 14次下载
    配置Keil嵌入式开发环境并基于<b>MDK</b>完成一个<b>STM32</b>汇编<b>程序</b>的编写

    STM32笔记--使用ST-Link下载hex文件

    程序时都是在MDK编译器中下载源代码,但ST-Link其实也可以直接下载hex文件STM32官方就有提供一个ST-Link下载程序的工具
    发表于 12-23 18:55 8次下载
    <b>STM32</b>笔记--使用ST-Link下载<b>hex</b><b>文件</b>

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

    MDK编译器STM32程序HEX文件中加入固件版本信息
    发表于 02-08 15:28 1次下载
    SMT32的<b>HEX</b><b>文件</b>里<b>加入</b><b>固件</b><b>版本</b>的方法

    stm32之.hex 文件

    编译 程序编译器(如图),这个设置意思是把程序下载到flash 的0x0800 0000开头的位置,然后编译程序 2.编译程序后,在工程目录
    发表于 04-20 09:28 3405次阅读
    <b>stm32</b>之.<b>hex</b> <b>文件</b>

    如何在Keil MDK中使用GCC编译器工具链

    MDK 是否支持编译器?有没有办法选择其他编译器? 可能你使用其他GUN工具链进行编译时,会出现类似如下错误: --- Error: cant execute as--- Error
    的头像 发表于 11-20 15:53 3614次阅读

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

    MDK编译器STM32程序HEX文件中加入固件版本信息
    的头像 发表于 08-14 16:13 1674次阅读

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

    hex文件或者bin文件,用来做固件烧录或者升级,如果用来做产品开发,就涉及到固件版本的问题,初学者通常采用固件文件重命名来区分版本
    的头像 发表于 02-15 15:13 693次阅读
    单片机<b>固件</b><b>中加入</b><b>版本</b><b>信息</b>的方式有哪些?-1

    嵌入式的HEX文件怎么来的

    程序需要将c文件通过编译器编译成o文件通过连接连接为一个main的o文件,再将main文件生成hex文件hex文件即可通过下载加载到我们的单片机。那么他到底是怎么
    的头像 发表于 05-25 15:05 1218次阅读
    嵌入式的<b>HEX</b><b>文件</b>怎么来的

    使用ARMClang V6版本编译器出现错误的解决方法

    STM32开发者使用ARM mdk IDE进行开发,我们知道ARM MDK IDE早已推出ARMClang V6版本编译器了。不过,当我们把在V5版本经ARMCC编译通过的工程文件放到V6版本ARMClang编译
    的头像 发表于 06-07 12:32 1159次阅读
    使用ARMClang V6<b>版本</b><b>编译器</b>出现错误的解决方法

    Keil修改ARM编译器及配置方法

    MDK自 V5.36 版本之后,默认就不带 Arm Compiler V5版本编译器。如果需要使用 V5 版本编译器,就需要自己下载并安装。
    发表于 09-19 10:41 147次阅读
    Keil修改ARM<b>编译器</b>及配置方法