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
    +关注

    关注

    10

    文章

    1549

    浏览量

    146636
  • STM32
    +关注

    关注

    2239

    文章

    10669

    浏览量

    348709
  • 编译器
    +关注

    关注

    1

    文章

    1575

    浏览量

    48606
  • MDK
    MDK
    +关注

    关注

    4

    文章

    208

    浏览量

    31769

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

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32CubeMX生成FreeRTOS的MDK工程不支持AC6编译器吗?

    使用STM32CubeMX生成FreeRTOS的MDK工程,选择AC5编译器可以编译成功,选择AC6编译器有很多错误,是
    发表于 03-06 08:24

    hightec编译生成hex文件要怎么操作?

    一些烧写工具需要.hex文件那么就需要在HIGTEC GNU编译器中进行设置,来产生想要的.hex文件。请教各位,该怎么设置?
    发表于 02-20 08:22

    MDK编译STM32F4开发板例程很慢是为什么?

    MDK编译STM32的HAL库确实是比较慢的,如果想使得编译速度更快,可以考虑使用编译器版本6来
    发表于 10-24 07:53

    C语言在编译hex文件的过程中,这个目标文件的大小跟编译器的优化等级有关系吗?

    C语言在编译hex文件的过程中,这个目标文件的大小跟编译器的优化等级有关系吗
    发表于 10-15 09:54

    MDK编译输出HEX文件中,怎么修改这个HEX的生成位置?

    MDK编译输出HEX文件中,怎么修改这个HEX的生成位置
    发表于 10-12 06:42

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

    Keil MDK自 V5.36 版本之后,默认就不带 Arm Compiler V5版本编译器。如果需要使用 V5 版本
    发表于 09-19 10:41 2162次阅读
    Keil修改ARM<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>的方法

    ARM编译器优化版本1.0

    ARM编译器armcc可以优化您的代码以实现小代码和高性能。 本教程介绍了编译器执行的主要优化技术,并解释了如何控制编译器优化。 本教程假定您已经安装并许可了ARM DS-5 Development Studio。 有关详细
    发表于 08-28 07:11

    ARM编译器5.06版入门指南

    的ARMLINK支持的所有功能。 如果您使用ARM编译器作为独立产品,则默认使用32位版本。 对于DS-5中的ARM编译器,链接版本取决于
    发表于 08-23 07:25

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

    时我们写程序,通常都会备注软件版本,那么,怎么在单片机中保存版本信息呢? 方法其实有很多,但基本原理都是在指定存储区域(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>

    Arm编译器fromelf用户指南

    fromelf图像转换实用程序允许您修改ELF图像和对象文件,并显示这些文件信息。 fromelf允许您: •处理编译器、汇编
    发表于 08-10 07:59

    使用V5版本经ARMCC编译放到V6时的一些错误

    很多STM32开发者使用ARM mdk IDE进行开发,我们知道ARM MDK IDE早已推出ARMClang V6版本编译器了。不过,当
    的头像 发表于 06-21 16:33 1310次阅读
    使用V5<b class='flag-5'>版本</b>经ARMCC<b class='flag-5'>编译</b>放到V6时的一些错误

    SDCC-Linux下的51 MCU编译器

    SDCC (小型设备C编译器)是为8位微控制器开发的免费C编译器。尽管兼容多种不同体系结构,但SDCC C编译器更适合8051内核。 SDCC是命令行固件开发工具,含预处理器、
    的头像 发表于 06-16 15:19 3642次阅读

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

    很多STM32开发者使用ARM mdk IDE进行开发,我们知道ARM MDK IDE早已推出ARMClang V6版本编译器了。不过,当
    的头像 发表于 06-07 12:32 3281次阅读
    使用ARMClang V6<b class='flag-5'>版本</b><b class='flag-5'>编译器</b>出现错误的解决方法

    嵌入式的HEX文件怎么来的

    单片机下载程序需要将c文件通过编译器编译成o文件通过连接器连接为一个main的o文件,再将mai
    的头像 发表于 05-25 15:05 1843次阅读
    嵌入式的<b class='flag-5'>HEX</b><b class='flag-5'>文件</b>怎么来的