嵌入式軟體版本管理一般都是人工維護,容易被遺忘造成不同軟體相同版本號,而對應的開發工具如keil或iar,目前沒有發現編譯前可載入exe方式外部修改版本號的方法。
當然有人會說可以用 __date__,__time__代替版本資訊,標準c庫都具有這兩個巨集,但輸出的格式太長不理想,作為乙個數字強迫症,只好自己想辦法在預編譯時把當前時間處理成數字版本號。
本文也是從這兩個巨集下手,通過預編譯計算出數字版本資訊,節省微控制器運算開銷。
巨集定義如下:
#define year ((__date__[7]-'0')*1000+(__date__[8]-'0')*100+(__date__[9]-'0')*10+(__date__[10]-'0'))
#define month (__date__[2]=='n'?1 \
:__date__[2]=='b'?2 \
:__date__[2]=='r'?(__date__[0]=='m'?3:4) \
:__date__[2]=='y'?5 \
:__date__[2]=='n'?6 \
:__date__[2]=='l'?7 \
:__date__[2]=='g'?8 \
:__date__[2]=='p'?9 \
:__date__[2]=='t'?10 \
:__date__[2]=='v'?11:12)
#define day ((__date__[4]==' '?0:__date__[4]-'0')*10 \
+(__date__[5]-'0'))
#define hour ((__time__[0]-'0')*10+(__time__[1]-'0'))
#define minute ((__time__[3]-'0')*10+(__time__[4]-'0'))
#define second ((__time__[6]-'0')*10+(__time__[7]-'0'))
uint32_t datestamp = (year%100)*100000000+month*1000000+day*10000+hour*100+minute;
使用方法:
在需要獲取的地方讀取到十進位制格式的datestamp變數,即可看到比較易讀的數字序列,格式為 yymmddhhmm,如: 2103150005。
個人認為,作為編譯版本資訊,精準到分鐘足以區分出不同版本標籤,通過日期容易追溯歷史版本,好過***x.xx.xx格式無意義的幻數,畢竟嵌入系統軟體作為內部管理,能簡單的區分便於維護即可。
注意,這個**檔案需要設定每次重新編譯,否則可能因為沒有改動而不更新,具體開發環境的設定方法就不在這裡討論了。
從微控制器到嵌入式
1 什麼是微控制器?微控制器是乙個控制系統,接收管腳中斷輸入,進行一些簡單的邏輯操作,對記憶體或flash進行訪問,再輸出到管腳 2 什麼是嵌入式?嵌入式有linux核心 linux核心功能有 程序管理 記憶體管理 檔案系統管理 裝置驅動 網路管理 3 微控制器和嵌入式有什麼共同點?都是靠中斷驅動,...
收集嵌入式論壇(ARM,DSP,FPGA,微控制器)
我先來 csdn 硬體嵌入式板塊,自是不用說了,俺就是在這裡成長的。www.armce.com bbs 這個專門wince的,我感覺也不錯,裡面收藏了很多原創和非原創工具 驅動開發網wince板塊,以前很火,不知道為啥現在墮落了。www.21ic.com 貌似也墮落了,不過偶爾去瞧瞧還可以,http...
嵌入式 微控制器成長開發之路
作為乙個畢業3個多月的職場新人,我輾轉到微控制器開發這條道路上。本科學習的是電腦科學與技術,現在的目標是成為一名全棧式嵌入式開發者。我深知,要想在這個行業有所建樹,大學學習的知識與經驗是完全不足的,需要花費更多時間和精力去學習軟體知識和硬體知識,才或許可以勉強成為本行業的入門者。這條路,走起來一定不...