Keil中使用__DATE__和__TIME__时,编译后没有更新的原因和注意事项

在MCU开发过程中,有时候我们会使用Keil的内置宏__DATE__和__TIME__这两个宏定义,在MCU上电时将它们通过UART打印出来,具体到编译的时分秒

printf("sys start!\r\n");
printf("Build at: %s %s\r\n",__DATE__, __TIME__);

输出:

sys start!

Build at: Sep 13 2023 09:52:54

我们预期的目的是,每次编译完成,烧录到MCU之后,MCU都能够准确打印出该固件的编译时间。但如果你发现打印的时间不准确,是较早前的时间,而不是真正编译的时间,那么需要注意:

需要确保每次编译时,这两条个宏定义,所在的文件都能够编译。按照Keil的编译逻辑,默认是不编译未修改过的源文件,只链接。

例如这两条打印语句的位置,是在int main(void)函数中,且main函数在main.c文件中,假如本次修改代码,未修改main.c文件,那么Keil是不会重新编译main.c文件的,也就不会将编译时的__DATE__和__TIME__编译进去。

也可以通过以下设置,使得main.c文件,无论是否修改,每次编译时都会重新编译它:

当然每次都编译main.c,并非是最好的代码风格,可以把版本号打印提炼成一个函数,并单独使用一个.c文件进行实现,并将这个.c文件按照以上方法设置。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值