平時(shí)我們寫程序,通常都會(huì)備注軟件版本,那么,怎么在單片機(jī)中保存版本信息呢?
方法其實(shí)有很多,但基本原理都是在指定存儲(chǔ)區(qū)域(Flash)中寫入軟件版本信息。
實(shí)現(xiàn)方法
下面就分享一個(gè)最常用,也是最基礎(chǔ)的小技巧:在Keil MDK環(huán)境下,通過軟件代碼,直接映射到并存儲(chǔ)到Flash指定地址。 包含:軟件版本、編譯日期、編譯時(shí)間,代碼如下:
const char Software_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x00))) = "Software: 1.0.0";
const char Compiler_Date[] __attribute__((at(VERINFO_ADDR_BASE + 0x40))) = "Date: "__DATE__;
const char Compiler_Time[] __attribute__((at(VERINFO_ADDR_BASE + 0x60))) = "Time: "__TIME__;
這個(gè)代碼大家能看懂么?原理很簡單,也有類似其他寫入Flash地址的方法(這里暫不講述)。
這里面包含幾個(gè)重要知識(shí)點(diǎn),下面給大家描述一下。
關(guān)鍵詞__attribute__
attribute,翻譯為“屬性”,在C語言中,是一個(gè)關(guān)鍵字,語法格式為:
__attribute__ ((attribute-list))
__attribute__ 可以設(shè)置函數(shù)屬性(Function Attribute )、變量屬性(Variable Attribute )和類型屬性(Type Attribute )。
這部分內(nèi)容,大家可以不用深入理解,知道這么用即可。要深入理解,網(wǎng)上也有很多學(xué)習(xí)資源。
C語言標(biāo)準(zhǔn)定義
在代碼中:
const char Compiler_Date[] __attribute__((at(VERINFO_ADDR_BASE + 0x40))) = "Date: "__DATE__;
const char Compiler_Time[] __attribute__((at(VERINFO_ADDR_BASE + 0x60))) = "Time: "__TIME__;
你會(huì)看到__DATE__ 和__TIME__表示的日期和時(shí)間。
其實(shí),這兩個(gè)是C語言特殊的標(biāo)準(zhǔn)定義。__DATE__:編譯時(shí)刻的日期字符串 如“Apr 13 2021”__TIME__:編譯時(shí)刻的時(shí)間字符串 如”2000“
除了這兩個(gè),其實(shí)還有很多類似的標(biāo)準(zhǔn)定義,比如:__FILE__:正在編譯文件的文件名__LINE__:正在編譯文件的行號(hào)
__STDC__:判斷該文件是不是標(biāo)準(zhǔn)C程序
這部分內(nèi)容,可以參看我的文章:C語言幾種特殊標(biāo)準(zhǔn)定義和用法
總是編譯版本文件
在Keil MDK中,默認(rèn)情況下,源文件不修改,只編譯一次。 因此,為了編譯版本、日期和時(shí)間正確,需要進(jìn)行設(shè)置:總是編譯。 如下設(shè)置:![c450d1c8-d8ce-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/BA/wKgZomTniYeAUShYAADgmxciy40189.png)
固件大小
生成的Hex文件會(huì)對(duì)沒有使用的Falsh用0x00進(jìn)行填充,比如:![c46026dc-d8ce-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/BA/wKgZomTniYeAYJ-AAACyEeWSxPo519.png)
2.網(wǎng)上還有一個(gè)方法,修改“ROM大小”:![c47b6d7a-d8ce-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/BA/wKgZomTniYeAVvWjAAC2haq2w6E941.png)
![c4904182-d8ce-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/BA/wKgZomTniYeAJlP1AASO_DS4jp0234.png)
-
單片機(jī)
+關(guān)注
關(guān)注
6044文章
44628瀏覽量
639017 -
程序
+關(guān)注
關(guān)注
117文章
3798瀏覽量
81464 -
keil
+關(guān)注
關(guān)注
69文章
1214瀏覽量
167371 -
MDK
+關(guān)注
關(guān)注
4文章
209瀏覽量
32180 -
編譯
+關(guān)注
關(guān)注
0文章
662瀏覽量
33073
原文標(biāo)題:單片機(jī)添加版本號(hào)的一些小技巧
文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
怎么加上.bin文件的版本號(hào)?
請(qǐng)問APP版本號(hào)如何設(shè)置才有效?
想問下這是什么庫的版本號(hào),4個(gè)字節(jié)的版本號(hào)分別是什么
請(qǐng)問mcfw有版本號(hào)嗎?
intel圖形驅(qū)動(dòng)程序版本號(hào)不對(duì)
ARM的幾種版本號(hào)
如何生成單片機(jī)嵌入式軟件自動(dòng)版本號(hào)
安裝后的應(yīng)用程序獲取版本號(hào)
求助,如何識(shí)別NUCLEO-G474RE的硬件版本號(hào)及硬件版本號(hào)對(duì)應(yīng)的原理圖版本號(hào)?
關(guān)于軟件、硬件版本號(hào)命名的常見規(guī)范
微軟新系統(tǒng)開始換版本號(hào)了 敬請(qǐng)期待
單片機(jī)嵌入式軟件自動(dòng)版本號(hào)生成方法
![<b class='flag-5'>單片機(jī)</b>嵌入式軟件自動(dòng)<b class='flag-5'>版本號(hào)</b>生成方法](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
在單片機(jī)中如何生成日期版本號(hào)
![在<b class='flag-5'>單片機(jī)</b>中如何生成日期<b class='flag-5'>版本號(hào)</b>](https://file1.elecfans.com/web2/M00/A4/5A/wKgaomUCeiSAB0CBAAEJQMsk9QI473.jpg)
評(píng)論