對(duì)嵌入式系統(tǒng)進(jìn)行版本控制的五個(gè)技巧
在這篇文章中,我們將研究對(duì)嵌入式系統(tǒng)進(jìn)行版本控制的五個(gè)技巧。
技巧1 – 使用 GPIO 對(duì) PCB 版本進(jìn)行硬編碼
并非所有系統(tǒng)都有兩個(gè)或三個(gè)可用的空閑 GPIO 線。相反,開發(fā)人員還可以利用免費(fèi)的模數(shù) (ADC) 通道并使用模擬電壓來(lái)表示版本號(hào)。在這種情況下,單個(gè) ADC 通道可以連接到電阻橋的中點(diǎn),其中一個(gè)電阻連接到 VCC,另一個(gè)連接到地。在這種情況下,將調(diào)整電阻值以提供與版本號(hào)相關(guān)聯(lián)的特定電壓。對(duì)于低功率應(yīng)用,開發(fā)人員希望選擇足夠大的電阻值,以防止任何大的寄生電流通過(guò)電路。
技巧2 – 使用 Major.Minor.Patch 語(yǔ)義
開發(fā)人員可以使用多種不同的方法對(duì)他們的嵌入式軟件進(jìn)行版本控制。不過(guò),應(yīng)該采用并適合大多數(shù)軟件開發(fā)團(tuán)隊(duì)使用的系統(tǒng)是 MAJOR.MINOR.PATCH 語(yǔ)義。毫無(wú)疑問,你已經(jīng)看到具有這些版本號(hào)的軟件,例如 1.0.0、1.1.2、2.4.2 等。
由于語(yǔ)義定義,通用版本控制方案和對(duì)更改影響的理解一目了然。例如,MAJOR 編號(hào)僅在軟件發(fā)布時(shí) API 更改不兼容時(shí)才會(huì)增加。這意味著我們僅在代碼發(fā)生不向后兼容的更改時(shí)才增加 MAJOR。僅當(dāng)進(jìn)行與現(xiàn)有 API 向后兼容的改進(jìn)時(shí),MINOR 編號(hào)才會(huì)增加。PATCH 僅在將錯(cuò)誤修復(fù)應(yīng)用于軟件時(shí)才會(huì)增加。
使用這種語(yǔ)義模式進(jìn)行版本控制將使任何軟件嵌入式開發(fā)人員都能理解版本控制。
技巧3 – 創(chuàng)建一個(gè) version.h 模塊
創(chuàng)建一個(gè)包含 Major.Minor.Patch 語(yǔ)義以及版本日志的 version.h 模塊是最有效的軟件版本控制方法??梢允褂煤甓x輕松設(shè)置軟件的版本號(hào),例如:
- #define VERSION_MAJOR (1)
- #define VERSION_MINOR (0)
- #define VERSION_PATCH (0)
開發(fā)人員甚至可以設(shè)置允許運(yùn)行軟件的最低硬件版本:
#define HARDWARE_VERSION_MIN (4)
version.h 模塊的一個(gè)重要部分不僅是對(duì)軟件進(jìn)行版本控制,而且還包括版本日志。這可以使用注釋來(lái)完成,并且應(yīng)該包括以下信息:
- 軟件版本
- 模塊已更改
- 對(duì)模塊的更改
技巧4 – 盡可能避免模塊和函數(shù)版本控制
嵌入式應(yīng)用程序的版本控制方式完全取決于嵌入式開發(fā)團(tuán)隊(duì),但建議盡可能避免模塊和功能級(jí)別的版本控制,意思是不將版本號(hào)分配給單個(gè) C 模塊或其中的函數(shù)。這樣做的原因是它為版本控制增加不必要的開銷,這也提高了版本控制信息出錯(cuò)的可能性。
例如,如果對(duì)一個(gè) Dio_Write 函數(shù)進(jìn)行了更改,不增加該函數(shù)的版本號(hào)。更新 Dio_Write 所在組件的版本號(hào),這可能是 Dio.c,也可能是驅(qū)動(dòng)程序組件,它是特定微控制器驅(qū)動(dòng)程序的集合。如果對(duì)功能進(jìn)行版本化,還必須對(duì)模塊、組件和軟件進(jìn)行版本化,可能會(huì)忘記在某個(gè)地方更新它,然后這些更改就會(huì)丟失。最好避免在如此低的級(jí)別進(jìn)行版本控制。
技巧5 – 將 VCS 與你的 IDE 集成
版本控制軟件的一個(gè)重要方面是該軟件如何集成到版本控制系統(tǒng) (VCS) 中。目前最流行的 VCS 是 git,但一些開發(fā)團(tuán)隊(duì)仍在使用 svn 和 mecurial。在對(duì)軟件進(jìn)行版本控制時(shí),確保將 VCS 功能集成到開發(fā)環(huán)境中以使提交更改變得簡(jiǎn)單和容易,這一點(diǎn)至關(guān)重要。例如,許多 VCS 插件將允許開發(fā)人員單擊一個(gè)按鈕,他們將添加任何新的更改到推送。他們還會(huì)彈出一個(gè)對(duì)話框,讓開發(fā)人員有機(jī)會(huì)評(píng)論他們所做的更改,這是復(fù)制在 version.h 中記錄的更改并將它們粘貼到 VCS 日志中的絕佳機(jī)會(huì),這樣軟件和 VCS 之間的所有版本信息都匹配!
結(jié)論
對(duì)嵌入式系統(tǒng)進(jìn)行版本控制并不一定很復(fù)雜。事實(shí)上,你對(duì)系統(tǒng)進(jìn)行版本控制越簡(jiǎn)單,使用錯(cuò)誤版本的硬件或軟件而出現(xiàn)混淆或問題的可能性就越小。嵌入式開發(fā)人員可以利用多種技巧來(lái)簡(jiǎn)化版本控制,例如使用集成版本日志和基于硬件的版本控制。無(wú)論采用什么系統(tǒng),成功的唯一方法是相關(guān)開發(fā)人員采用嚴(yán)格的版本控制方法,并且在提交軟件時(shí)不要偷工減料。