[技术问答] 单片机程序HEX文件中加入固件版本信息步骤详解

[复制链接]
 楼主| zhamatu 发表于 2020-7-28 08:50 | 显示全部楼层 |阅读模式
    1.1. 方法一:变量定义版本
  1. #define HW_NAME   XXX
  2. #define FW_FUNCTION  1
  3. #define FW_STAGE     0
  4. #define FW_NO        6

  5. #define STR1(R) #R
  6. #define STR2(R) STR1(R)
  7. #define XXX_VERSION  STR2(HW_NAME) "." STR2(FW_FUNCTION) "." STR2(FW_STAGE) "." STR2(FW_NO)


 楼主| zhamatu 发表于 2020-7-28 08:51 | 显示全部楼层
   1.2. 方法二:HEX文件中加入固件版本信息
         1.2.1. 相比于方法一,方法二可以直接从hex读取版本
         1.2.2. __attribute__ 机制
              a. __attribute__ 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute ),使用at参数,可以把变量或函数绝对定位到Flash或者RAM中
              b. 示例模板
  1. #define VERINFO_ADDR_BASE   (0x8009F00) // 版本信息在FLASH中的存放地址
  2. const char Hardware_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x00)))  = "Hardware: 1.0.0";
  3. const char Firmware_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x20)))  = "Firmware: 1.0.0";
  4. const char Compiler_Date[] __attribute__((at(VERINFO_ADDR_BASE + 0x40))) = "Date: "__DATE__;
  5. const char Compiler_Time[] __attribute__((at(VERINFO_ADDR_BASE + 0x60))) = "Time: "__TIME__;
             c. 选项配置中:Flash地址与大小不用做任何修改
1565092-20200701162941073-1677182381.jpg


1565092-20200701162933650-481559769.jpg

スモモ 发表于 2020-8-23 18:56 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

504

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

63

主题

504

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部