在MCU開發(fā)過程中,有時(shí)候需要軟件的迭代,比如從V1.9升級(jí)到V1.10,或者從V23.09.23升級(jí)到V23.09.24,我們常常通過手動(dòng)改動(dòng)字符串或者數(shù)組來實(shí)現(xiàn)這個(gè)功能,從現(xiàn)在開始,我們會(huì)使用Keil的內(nèi)置宏__DATE__和__TIME__,通過這2個(gè)宏,每次程序編譯完成,燒錄到MCU之后,MCU都能夠準(zhǔn)確打印出該固件的編譯時(shí)間。
printf("(版本/編譯時(shí)間: %s,%s)\r\n", __DATE__,__TIME__);
上圖中編譯時(shí)間是18:21:14,但是串口打印的時(shí)間卻是18:21:23。但是我們發(fā)現(xiàn)電腦的時(shí)間何編譯的時(shí)間還是有一點(diǎn)點(diǎn)區(qū)別的,原因是,編譯之后,代碼還要下載,還要運(yùn)行,這個(gè)也是需要時(shí)間的,所以產(chǎn)生了誤差。但如果你發(fā)現(xiàn)打印的時(shí)間不準(zhǔn)確,是較早前的時(shí)間,比如很明顯相差1分鐘以上,或者你認(rèn)為這個(gè)時(shí)間不是真正編譯的時(shí)間,那么需要注意:按照Keil的編譯邏輯,默認(rèn)是不編譯未修改過的源文件,只鏈接。說詳細(xì)一點(diǎn)點(diǎn)就是:例如這兩條打印語句的位置,是在int main(void)函數(shù)中,且main函數(shù)在main.c文件中,假如本次修改代碼,未修改main.c文件,那么Keil是不會(huì)重新編譯main.c文件的,也就不會(huì)將編譯時(shí)的__DATE__和__TIME__編譯進(jìn)去。也可以通過以下設(shè)置,使得main.c文件,無論是否修改,每次編譯時(shí)都會(huì)重新編譯它:
當(dāng)然每次都編譯main.c,并非是最好的代碼風(fēng)格,可以把版本號(hào)打印提煉成一個(gè)函數(shù),并單獨(dú)使用一個(gè).c文件進(jìn)行實(shí)現(xiàn),并將這個(gè).c文件按照以上方法設(shè)置。
-
mcu
+關(guān)注
關(guān)注
146文章
17019瀏覽量
350371 -
STM32
+關(guān)注
關(guān)注
2266文章
10876瀏覽量
354922 -
keil
+關(guān)注
關(guān)注
68文章
1212瀏覽量
166701
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論