在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文章
18925瀏覽量
398309 -
STM32
+關注
關注
2309文章
11162瀏覽量
373477 -
keil
+關注
關注
69文章
1230瀏覽量
172649
發布評論請先 登錄
國內企業級SSD廠商加速崛起
深演智能發布新一代企業級AI智能體平臺DeepAgent 3.0版本
海微科技智能倉庫2.0項目正式啟動
rt-thread studio中創建不了gd32項目是怎么回事?
企業級Linux磁盤維護的完整流程
企業級智能體是什么?有什么作用?
企業級MySQL數據庫管理指南
企業級SSD的核心技術與市場趨勢
誰說高性能必須高能耗?揭秘企業級SSD功耗管理“黑科技”
DeepSeek企業級部署RakSmart裸機云環境準備指南
企業級Claude API應用方案!完整調用攻略來襲:帶你解鎖Claude 3.5/3.7大模型
企業級操作之STM32項目版本管理方法
評論