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

    文章

    1633

    浏览量

    147944
  • STM32
    +关注

    关注

    2270

    文章

    10895

    浏览量

    355750
  • 编译器
    +关注

    关注

    1

    文章

    1623

    浏览量

    49108
  • MDK
    MDK
    +关注

    关注

    4

    文章

    209

    浏览量

    32063

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

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

收藏 人收藏

    评论

    相关推荐

    分享一个keil MDK编译信息增强工具

    今天给大家分享一个 keil MDK 编译信息增强工具:keil-build-viewer. 1 keil-build-viewer介绍 这是一个 keil 的编译
    的头像 发表于 11-14 11:01 413次阅读

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

    使用C语言编写,然后编译成机器码并烧录到单片机的存储中。 Hex文件是一种用于存储单片机程序文件
    的头像 发表于 09-02 10:49 3089次阅读

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

    将 .hex 文件直接“转回去”为原始的C语言代码是不可能的,因为 .hex 文件编译后的二进制文件
    的头像 发表于 09-02 10:46 2081次阅读

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

    是处理可以直接执行的指令,而 C 语言代码则是人类可读的高级编程语言代码。 然而,如果你想要从 .hex 文件中获取一些有用的信息或者对程序
    的头像 发表于 09-02 10:37 2134次阅读

    怎样将keil中的程序导出

    1. 准备工作 在开始导出程序之前,需要确保已经完成了以下准备工作: 安装Keil MDK-ARM软件。 创建一个新的项目,并添加所需的源文件和库文件。 配置项目设置,包括芯片型号、
    的头像 发表于 09-02 10:23 1505次阅读

    AI编译器技术剖析

    随着人工智能技术的飞速发展,AI编译器作为一种新兴的编译技术逐渐进入人们的视野。AI编译器不仅具备传统编译器的功能,如将高级语言编写的源代码转换为机器可执行的代码,还融入了人工智能技术
    的头像 发表于 07-17 18:28 1616次阅读

    人工智能编译器与传统编译器的区别

    人工智能编译器(AI编译器)与传统编译器在多个方面存在显著的差异。这些差异主要体现在设计目标、功能特性、优化策略、适用范围以及技术复杂性等方面。以下是对两者区别的详细探讨,旨在全面解析其内在差异。
    的头像 发表于 07-17 18:19 1836次阅读

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

    TSMaster软件的Hex文件编辑提供了文件处理的功能,这一特性使用TSMaster软件的用户可以更便捷地对
    的头像 发表于 06-01 08:21 780次阅读
    TSMaster 中 <b class='flag-5'>Hex</b> <b class='flag-5'>文件</b>编辑器使用详细教程

    Eclipse和MDK编译代码后Eclipse生成的HEX文件太大了怎么办?

    Eclipse 和 MDK 编译代码后 Eclipse生成的HEX文件太大 ,怎么破?
    发表于 04-29 08:09

    使用mdk的ac6编译器一直报错是怎么回事?

    使用mdk的ac6编译器一直报错
    发表于 04-10 06:01

    用CUBE生成STM32H743工程,用iar编译器进入硬件错误是哪里的问题?

    最近在用CUBE 生成STM32H743工程,用iar编译器进入硬件错误,用MDK就没问题,STM32H743只能用MDK吗?
    发表于 04-07 06:07

    使用STM32CubeProgrammer来下载hex文件报错,为什么?

    : 然后,想使用STM32CubeProgrammer来下载hex文件,也不行,出现错误: 内核被锁住了?也不知道我咋操作的,芯片坏了吗? 现在怎么办?
    发表于 03-18 07:03

    怎么在NanoEdge AI Studio设定交叉编译器呢?

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

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

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

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

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