在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
+關注
關注
146文章
17168瀏覽量
351408 -
STM32
+關注
關注
2270文章
10904瀏覽量
356307 -
keil
+關注
關注
68文章
1213瀏覽量
166942
發布評論請先 登錄
相關推薦
評論