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

    文章

    1762

    浏览量

    156125
  • STM32
    +关注

    关注

    2313

    文章

    11210

    浏览量

    375267
  • 编译器
    +关注

    关注

    1

    文章

    1673

    浏览量

    52077
  • MDK
    MDK
    +关注

    关注

    4

    文章

    211

    浏览量

    33772

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    STM32WB 系列微控制 OTA 和无线固件更新应用笔记

    本文档介绍了通过低功耗蓝牙连接在 STM32WB 设备上进行 OTA 固件更新的过程。它讲解如何使用 STM32Cube 固件包中提供的 OTA 应用
    发表于 01-08 14:50 0次下载

    固件版本错配:一个老工程师都栽过跟头的“低级错误”

    。示例:PJ101_HW2.1_SW1.4.3_20230711_Release.hex。所有正式发布固件必须存放于受版本管理的服务指定目录,个人工作区
    发表于 12-18 10:31

    开源鸿蒙技术大会2025丨编译器与编程语言分论坛:语言驱动系统创新,编译赋能生态繁荣

    在万物智联的时代背景下,操作系统底层能力的构建离不开编程语言与编译器的关键支撑。作为开源鸿蒙生态的核心技术,语言设计与编译器、虚拟机实现的进步直接关系到开发效率、运行性能与系统安全。本次分论坛聚焦
    的头像 发表于 11-20 17:24 1283次阅读
    开源鸿蒙技术大会2025丨<b class='flag-5'>编译器</b>与编程语言分论坛:语言驱动系统创新,<b class='flag-5'>编译</b>赋能生态繁荣

    GCC编译器,怎么才能实现c文件中未被调用的函数,不会被编译呢?

    GCC编译器,怎么才能实现c文件中未被调用的函数,不会被编译?有什么编译选项可以设置吗? 移植代码,有些函数没被调用的函数想留在代码里,但不想被编译
    发表于 09-28 12:25

    nano版本使用AC6编译器下,不显示msh怎么解决?

    ;gt; 字符串。 排查问题大概猜测应该是 FinSH 根本就不工作,主要原因很可能是 AC6 版本没有把FinSH那些代码编译到最终的bin文件。 网上说要修改链接文件,但是网上的
    发表于 09-25 07:19

    rtt5.0.0下lvgl在正点原子stm32f407探索者开发板V3上mdk编译报错怎么解决?

    开发板为正点原子stm32f407探索者V3,在rtt5.0.0版本加入lvgl及相应的lcd, touch驱动,其它什么功能也没加,在mdk
    发表于 09-22 06:17

    rt_list_for_each_entry编译失败怎么解决?

    最新版本的rtthread,做SDIO模式的SD卡,里面包含了blk.C文件文件里有多个rt_list_for_each_entry,我用的是keil mdk AC6,
    发表于 09-18 07:14

    rtthread V5.2.1 scons无法编译MDK编译失败怎么解决?

    环境: 系统版本:V5.2.1 env版本:env-windows-v2.0.0 bsp:stm32g474-st-nucleo 问题: env中用scons编译失败,提示Dep
    发表于 09-15 06:25

    【RA4E2开发板评测】RACS配置+MDK编程+RA Flash Programmer下载程序测试LED经验分享

    对应的工程文件夹,首先编译全部程序程序0错误,0警告。 低版本MDK此处
    发表于 08-31 14:50

    求助,关于NanoEdge AI Studio生成的库交叉编译器版本疑问求解

    我使用的是NanoEdge AI Studio v4.3.1,跟着官方交教程生成了库libneai.a,我通过metadata.json文件得知生成这个库的交叉编译器版本是\"
    发表于 08-08 07:25

    HighTec编译HEX文件烧录进去开发板时,程序并没有在运行是怎么回事?

    我目前正在使用DAvE2 + HighTec + Memtools等工具正在对TC1796的开发版进行测试,但我发现,HighTec编译HEX文件烧录进去开发板时,程序并没有在运行,
    发表于 08-01 07:46

    边缘设备AI部署:编译器如何实现轻量化与高性能?

    电子发烧友网综合报道 AI编译器是专门为人工智能(AI)和机器学习(ML)模型设计的编译器,其核心目标是将高级的AI模型描述(如计算图、神经网络结构)转换为特定硬件平台(如CPU、GPU、FPGA
    的头像 发表于 07-06 05:49 7056次阅读

    兆松科技发布高性能RISC-V编译器ZCC 4.0.0版本

    近日,兆松科技(武汉)有限公司(以下简称“兆松科技”)宣布正式发布高性能 RISC-V 编译器 ZCC 4.0.0 版本。新版本在性能优化、厂商自定义指令支持和软件库等方面实现全面升级,并同步推出
    的头像 发表于 06-27 14:48 4090次阅读
    兆松科技发布高性能RISC-V<b class='flag-5'>编译器</b>ZCC 4.0.0<b class='flag-5'>版本</b>

    stellar studio按照说明文档进行编译器环境配置,为什么会报错?

    已经是按照说明文档进行编译器环境配置,但是还是会报错,问题大概可能是文件系统操作错误,无法访问打开文件,看样子像系统问题,但是其他同学有和我系统版本号一样的也可以
    发表于 06-12 07:49

    兆松科技ZCC编译器全面支持芯来科技NA系列处理

    近日,兆松科技(武汉)有限公司(以下简称“兆松科技”)宣布正式发布高性能RISC-V编译器ZCC 4.0.0版本
    的头像 发表于 06-11 09:56 2092次阅读