MDK中自动添加程序编译日期版本

本文介绍了如何通过编译时间和程序内置日期版本号管理STM32程序。利用MDK编译器,可以在编译时自动生成带日期的HEX文件,并将版本号写入特定内存地址,方便BOOT读取。此外,还提供了从编译日期自动创建SREC文件的方法,包括批处理脚本的使用。
摘要由CSDN通过智能技术生成

1.通过编译时间来管理程序版本:

1)编译时自动生成带日期的hex,如20210909.srec

2)程序中固定位置带有日期数字的版本号,例如在0x08007000的flash地址值为日期

2.程序自带日期版本号处理

MDK编译时通过符号获取当前编译日期代码

#define sysVER_YEAR ((((__DATE__ [7] - '0') * 10 + (__DATE__ [8] - '0')) * 10 \
    + (__DATE__ [9] - '0')) * 10 + (__DATE__ [10] - '0'))
 
/*
January (Jan)---Febuary (Feb)---March (Mar)---April (Apr)---May (May)---June (Jun)--
July (Jul)---August (Aug)---September (Sep)---October (Oct)---November (Nov)---SDecember (Dec)--
*/
 
#define sysVER_MONTH (__DATE__ [2] == 'n' ? 1 \
    : __DATE__ [2] == 'b' ? 2 \
    : __DATE__ [2] == 'r' ? (__DATE__ [0] == 'M' ? 3 : 4) \
    : __DATE__ [2] == 'y' ? 5 \
    : __DATE__ [2] == 'n' ? 6 \
    : __DATE__ [2] == 'l' ? 7 \
    : __DATE__ [2] == 'g' ? 8 \
    : __DATE__ [2] == 'p' ? 9 \
    : __DATE__ [2] == 't' ? 10 \
    : __DATE__ [2] == 'v' ? 11 : 12)
 
#define sysVER_DAY ((__DATE__ [4] == ' ' ? 0 : __DATE__ [4] - '0') * 10 \
    + (__DATE__ [5] - '0'))
 

#define sysVER_TIME    ( (__TIME__[0] - '0')*1000 + (__TIME__[1] - '0')*100 \
                            + (__TIME__[3] - '0')*10 + (__TIME__[4] - '0') )
 
 
#define sysVER_DATE ((sysVER_YEAR-2000) * 10000 + (sysVER_MONTH) * 100 + (sysVER_DAY))
 

#define sysVER_SOFT   (sysVER_DATE*10000 + sysVER_TIME)

/*MDK AC6*/
const u32 __attribute__( ( section( ".ARM.__at_0x08007000" ) ) )     g_sys_ver_soft = sysVER_SOFT;

编译后0x08887000地址处为日期版本号,可通过g_sys_ver_soft 访问

BOOT可以根据这个固定地址读出APP的版本号

3.MDK自动生成带日期标记的srec

通过MDK自带的编译后脚本调用实现

 fromelf --m32 --output=.\Template\Template.srec  .\Template\Template.axf

.\rename.bat

1)通过 fromelf  生成srec文件,命令行中的Template与工程目录具体配置相关

2)通过windows bat脚本来修改文件名

rename脚本示例,相关目录需要根据工程配置修改,可以增减前后缀

set h=%time:~0,2%
set h=%h: =0%
@set T=%date:~0,4%%date:~5,2%%date:~8,2%_%h%%time:~3,2%
@echo on
 
@rem ::清空以前的srec文件
@del /q .\*.srec

@rem ::更改BIN文件下的文件名为当前日期
copy .\Template\Template.srec  .\STM32F030_%T%.srec

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值