单片机
返回首页

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

2023-10-17 来源:elecfans

本文介绍一个小技巧:

使用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了。


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 简洁的过零调功器电路设计与分析

  • 单稳态控制电路设计与分析

  • 永不缺相启动运行的电动机控制电路

  • CCFL的工作原理及电子驱动电路解析

  • 开关电源的基本组成及工作原理

  • MT3608构成3.7V转12V的升压电路图

    相关电子头条文章