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

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

    关注

    116

    文章

    3773

    浏览量

    80830
  • 编译器
    +关注

    关注

    1

    文章

    1618

    浏览量

    49043
  • HEX
    HEX
    +关注

    关注

    0

    文章

    37

    浏览量

    16796
收藏 人收藏

    评论

    相关推荐

    hex格式和二进制的区别

    HEX格式和二进制在多个方面存在显著的区别。以下是对这两者的对比: 一、定义与表示方式 HEX格式 : HEX,全称为Intel HEX,是一种用于存储和传输数据到嵌入式系统(如单片机
    的头像 发表于 11-18 15:24 198次阅读

    最新的Aduino IDE 2.3.3如何输出hex文件

    如题,在这个版本里的首选项里,已经没有所谓的“preference.txt”的路径,在路径里也没有找到这个东西,编译勾上后,输出的只有bin、elf和map,找不到hex文件
    发表于 10-04 12:06

    单片机hex文件反编译成C语言的过程

    单片机和Hex文件简介 单片机(Microcontroller Unit,MCU)是一种集成了处理器、存储器和输入/输出接口的微型计算机。它广泛应用于各种嵌入式系统和智能设备中。单片机的程序通常
    的头像 发表于 09-02 10:49 2443次阅读

    hex文件怎么能转回去c语言

    将 .hex 文件直接“转回去”为原始的C语言代码是不可能的,因为 .hex 文件是编译后的二进制文件,它包含了机器码,这些机器码是处理器可
    的头像 发表于 09-02 10:46 1516次阅读

    hex可以转成源代码么

    ,可以通过以下几种方法尝试获取源代码的近似形式: 反汇编 : 使用反汇编工具可以将Hex文件中的机器码转换回汇编语言。汇编语言是一种低级语言,它更接近于机器码,但仍然具有一定的可读性。 通过反汇编得到的汇编代码可以提供程序
    的头像 发表于 09-02 10:41 752次阅读

    hex文件如何查看原c语言代码

    是处理器可以直接执行的指令,而 C 语言代码则是人类可读的高级编程语言代码。 然而,如果你想要从 .hex 文件中获取一些有用的信息或者对程序进行分析,你可以考虑以下几种方法: 反汇编(Disassembly) : 使用反汇编工
    的头像 发表于 09-02 10:37 1461次阅读

    使用CY521 EVAL配置CYPD2122,如何将文件保存为HEX格式?

    我正在使用 CY521 EVAL 配置 CYPD2122。 一切运行正常,我现在希望将文件保存为 HEX 格式,以便通过 MiniProg4 进行编程。但是,当我进入\"保存到固件文件
    发表于 08-12 08:19

    使用ESP32的Release/v2.1.0.0版本的AT固件,想升级成自己编译的AT固件版本,有什么方法可实现吗?

    目前使用 ESP32 的 Release/v2.1.0.0 版本的 AT固件,想升级成自己编译的 AT 固件版本,有什么方法可实现吗?
    发表于 06-27 06:16

    怎么加上.bin文件版本号?

    描述:我想在工程名称后添加改工程的版本,这样生成的固件就是带版本号的。 问题:目前生成的bin文件后面带不上版本号,不知道为啥?如下图所示。
    发表于 06-11 07:43

    SMT32手搓5套无人机飞控,最终决定开源……

    !01V1.0的特性/亮点?1.成本仅90元2.基于STM32H743VI设计3.可以下载各种完整版固件!根据MatekH7固件的bfconfig文件制作,BF、I
    的头像 发表于 06-02 08:04 638次阅读
    用<b class='flag-5'>SMT32</b>手搓5套无人机飞控,最终决定开源……

    TSMaster 中 Hex 文件编辑器使用详细教程

    TSMaster中Hex文件编辑器的使用方法,该编辑器能实现将现有的Hex、bin、mot、s19和tsbinary类型的文件按地址分割;并
    的头像 发表于 06-01 08:21 666次阅读
    TSMaster 中 <b class='flag-5'>Hex</b> <b class='flag-5'>文件</b>编辑器使用详细教程

    使用psoc编程器写入Modus生成的Hex文件时,Hex文件解析失败的原因?

    我们正在使用 pSoC6 CY8C6137BZI-F14 做软件, 我们使用 Modus 集成开发环境。 但当我们使用 psoc 编程器写入 Modus 生成的 Hex 文件时, psoc 编程器显示以下错误: Hex
    发表于 05-21 06:57

    STVD如何设置才能生成HEX文件呢?

    请教大家,如何设置才能生成HEX文件呢?我百度一下,按网上的方法,其实是不行。所以在次求助,谢谢了
    发表于 04-28 07:50

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

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

    tl-wda5532re固件升级

    升级。 第一步:检查固件版本 在进行固件升级之前,我们首先需要检查当前设备上的固件版本。这可以帮助我们确定是否需要升级以及选择正确的升级
    的头像 发表于 01-04 10:40 777次阅读