嵌入式软件版本管理一般都是人工维护,容易被遗忘造成不同软件相同版本号,而对应的开发工具如Keil或IAR,目前没有发现编译前可加载exe方式外部修改版本号的方法。
当然有人会说可以用 __DATE__,__TIME__代替版本信息,标准C库都具有这两个宏,但输出的格式太长不理想,作为一个数字强迫症,只好自己想办法在预编译时把当前时间处理成数字版本号。
本文也是从这两个宏下手,通过预编译计算出数字版本信息,节省单片机运算开销。
宏定义如下:
#define YEAR ((__DATE__[7]-'0')*1000+(__DATE__[8]-'0')*100+(__DATE__[9]-'0')*10+(__DATE__[10]-'0'))
#define 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 DAY ((__DATE__[4]==' '?0:__DATE__[4]-'0')*10 \
+(__DATE__[5]-'0'))
#define HOUR ((__TIME__[0]-'0')*10+(__TIME__[1]-'0'))
#define MINUTE ((__TIME__[3]-'0')*10+(__TIME__[4]-'0'))
#define SECOND ((__TIME__[6]-'0')*10+(__TIME__[7]-'0'))
uint32_t dateStamp = (YEAR%100)*100000000+MONTH*1000000+DAY*10000+HOUR*100+MINUTE;
使用方法:
在需要获取的地方读取到十进制格式的dateStamp变量,即可看到比较易读的数字序列,格式为 YYMMDDHHMM,如: 2103150005。
个人认为,作为编译版本信息,精准到分钟足以区分出不同版本标签,通过日期容易追溯历史版本,好过xxxx.xx.xx格式无意义的幻数,毕竟嵌入系统软件作为内部管理,能简单的区分便于维护即可。
注意,这个代码文件需要设置每次重新编译,否则可能因为没有改动而不更新,具体开发环境的设置方法就不在这里讨论了。
主题授权提示:请在后台主题设置-主题授权-激活主题的正版授权,授权购买:RiTheme官网
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。