加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

绝妙 如何在SMT32程序HEX文件中加入固件版本信息

2020/07/01
181
阅读需 5 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

大家有没有遇到过软硬件工程师扯皮的事情?如果一个程序,固件信息里面没有任何版本信息,代码里面通过串口等接口也查询不到固件版本等信息,一旦出现问题,就会你推我,我推你了。那么,怎么样来避免这种情况发生呢?一种方法是,就像上面提到的,可以将固件版本信息定义成一个常量存放在程序中,需要的时候可以通过串口等接口查询代码版本信息,另一种,是今天上网看到的,思路也非常巧妙,这里分享给大家!

使用 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__;
//------------------------------------------------------------------------------

看到没,这里使用了 __attribute__ 机制,__attribute__ 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute ),使用 at 参数,可以把变量或函数绝对定位到 Flash 或者 RAM 中。  具体语法,请自行百度,这里不再赘述。

 

选项配置中:Flash 地址与大小不用做任何修改!

重点在这里

 

串口打印输出

有了这一个简单的设置,将固件版本信息,硬件版本信息,软件编译时间等,就可以定义在 Flash 中的空闲位置,既可以通过 HEX 文件直接看出,亦可以通过串口打印版本信息,非常方便。怎么样,赶快加到你的程序中试一下吧,从此,软硬件工程师又手拉手,亲密无间

相关推荐

电子产业图谱

最全电子漫画收集达人,漫画控必选!用文字和图片带你领略电子世界之美。 由晓宇哥哥操刀的芯片之家公众号,提供45万个Symbol和3D封装库免费下载,定期分享软硬件、物联网类技术知识外,还精心整理大量参考设计和文档资源,电路图和源代码资料供下载。 立即打开“芯片之家 ”,感受电子与艺术的完美结合。