在MCU开发过程中,有时候需要软件的迭代,比如从V1.9升级到V1.10,或者从V23.09.23升级到V23.09.24,我们常常通过手动改动字符串或者数组来实现这个功能,从现在开始,我们会使用Keil的内置宏__DATE__和__TIME__,通过这2个宏,每次程序编译完成,烧录到MCU之后,MCU都能够准确打印出该固件的编译时间。
printf("(版本/编译时间: %s,%s)\r\n", __DATE__,__TIME__);

上图中编译时间是18:21:14,但是串口打印的时间却是18:21:23。但是我们发现电脑的时间何编译的时间还是有一点点区别的,原因是,编译之后,代码还要下载,还要运行,这个也是需要时间的,所以产生了误差。但如果你发现打印的时间不准确,是较早前的时间,比如很明显相差1分钟以上,或者你认为这个时间不是真正编译的时间,那么需要注意:按照Keil的编译逻辑,默认是不编译未修改过的源文件,只链接。说详细一点点就是:例如这两条打印语句的位置,是在int main(void)函数中,且main函数在main.c文件中,假如本次修改代码,未修改main.c文件,那么Keil是不会重新编译main.c文件的,也就不会将编译时的__DATE__和__TIME__编译进去。也可以通过以下设置,使得main.c文件,无论是否修改,每次编译时都会重新编译它:


当然每次都编译main.c,并非是最好的代码风格,可以把版本号打印提炼成一个函数,并单独使用一个.c文件进行实现,并将这个.c文件按照以上方法设置。
-
mcu
+关注
关注
147文章
18605浏览量
386932 -
STM32
+关注
关注
2305文章
11120浏览量
371134 -
keil
+关注
关注
69文章
1224浏览量
171802
发布评论请先 登录
国内企业级SSD厂商加速崛起
海微科技智能仓库2.0项目正式启动
rt-thread studio中创建不了gd32项目是怎么回事?
企业级Linux磁盘维护的完整流程
企业级智能体是什么?有什么作用?
企业级MySQL数据库管理指南
企业级SSD的核心技术与市场趋势
慧荣科技企业级主控芯片SM8366为企业级SSD存储芯片注入新动力
hyper v 虚拟化,hyper-v虚拟化:企业级虚拟化解决方案的全面解析
构建企业级文件管理系统,轻松搭建 Seafile 社区版云存储解决方案

企业级操作之STM32项目版本管理方法
评论