嵌入式軟件配置管理可能是一項(xiàng)棘手的工作。今天的系統(tǒng)通常設(shè)計(jì)為在多種產(chǎn)品中為不同的客戶在很長一段時(shí)間內(nèi)工作,這些系統(tǒng)需要能夠輕松配置,以便代碼不會(huì)成為噩夢,并最大限度地減少配置不當(dāng)?shù)臋C(jī)會(huì)。在這篇文章中,我們將探討嵌入式軟件配置管理的三個(gè)技巧,這些技巧可以幫助嵌入式開發(fā)人員簡化配置并最大限度地減少產(chǎn)品生命周期內(nèi)的技術(shù)債務(wù)。
技巧1 – 使用單獨(dú)的回購
在開發(fā)嵌入式產(chǎn)品時(shí),將產(chǎn)品的所有代碼放入單個(gè)版本控制存儲(chǔ)庫中可能很誘人。畢竟是一個(gè)產(chǎn)品,不應(yīng)該把產(chǎn)品的所有東西都放在一個(gè)地方嗎?不!將應(yīng)用程序分成多個(gè)存儲(chǔ)庫可以顯著改善代碼庫配置管理。
在許多情況下,一個(gè)產(chǎn)品代碼將用于多個(gè)產(chǎn)品SKU,并且在十年或更長時(shí)間內(nèi),可能會(huì)找到不同的配置來滿足客戶的要求。因此,團(tuán)隊(duì)可以仔細(xì)檢查他們的產(chǎn)品設(shè)計(jì)并將所有配置代碼放入單獨(dú)的存儲(chǔ)庫中。至少,這會(huì)創(chuàng)建核心產(chǎn)品代碼和幾個(gè)配置存儲(chǔ)庫,用于管理核心應(yīng)用程序的行為方式。這樣做的好處是,如果SKU 或特定客戶需要更改配置,它不會(huì)強(qiáng)制更改可能意外傳播到其他系統(tǒng)的應(yīng)用程序。
配置不是唯一可以從放置在單獨(dú)的存儲(chǔ)庫中受益的組件,將應(yīng)用程序的每一層放入不同的存儲(chǔ)庫也有好處。例如,將驅(qū)動(dòng)程序、中間件和應(yīng)用程序分離到單獨(dú)的存儲(chǔ)庫中可以迫使嵌入式開發(fā)人員更多地考慮代碼的接口和抽象,這將有助于最大限度地減少層之間的耦合。例如,在芯片短缺期間,許多團(tuán)隊(duì)一直在努力更換微控制器,因?yàn)樗麄儗?yīng)用程序與硬件緊密耦合。
技巧2 – 利用 YAML、JSON 和 XML 文件
在許多嵌入式產(chǎn)品中,開發(fā)人員將使用條件編譯語句來管理他們的系統(tǒng)配置。 例如,如果我有兩個(gè)不同的系統(tǒng),一個(gè)有兩個(gè)可以控制的繼電器,另一個(gè)有四個(gè),開發(fā)人員將編寫如下C代碼:
#if SKU == PRODUCT_1
// Custom configuration for two relays.
#elif SKU == PRODUCT_2
// Custom configuration for four relays.
#else
#error “The Product SKU has not been defined!”
#endif
如果產(chǎn)品很簡單,那么在代碼中散布一些條件編譯并不是什么大問題,然而,今天的系統(tǒng)非常復(fù)雜,可能有數(shù)千條這樣的語句分散在各處。可以想象,這將成為維護(hù)和配置的噩夢。
開發(fā)人員可以利用配置文件,而不是使用條件編譯。有兩種方式可以利用配置文件。首先,嵌入式開發(fā)人員可以只創(chuàng)建包含產(chǎn)品配置信息的C模塊配置,這些配置值被傳遞到各種應(yīng)用程序、中間件和驅(qū)動(dòng)程序初始化函數(shù)中。其次,基于C的配置文件易于設(shè)置和維護(hù)。
一種更現(xiàn)代的方法是利用 YAML、JSON 和/或 XML格式的配置文件。例如,回顧條件編譯示例,我們可以為兩個(gè)中繼配置編寫一個(gè)如下所示的YAML文件:
—
Hardware:
Relays:
0x01:GPIO01
0x02:GPIO15
四中繼配置 YAML 文件可能如下所示:
—
Hardware:
Relays:
0x01:GPIO01
0x02:GPIO15
0x03:GPIO22
0x04:GPIO23
使用YAML、JSON 和 XML文件有一個(gè)有趣的轉(zhuǎn)折,如何使用這些文件來配置 C/C 應(yīng)用程序?有幾種方法,比如編寫一個(gè)腳本,讀取YAML文件,然后生成等效的C代碼。例如,該過程可能如下所示:
有些人在C之外使用配置文件并依賴腳本來構(gòu)建配置感覺很復(fù)雜。但是,如果操作正確,這種技術(shù)可以成為管理系統(tǒng)配置的一種有價(jià)值且有益的方式。
技巧3 – 使用C/C 包管理器
嵌入式開發(fā)人員可以利用的另一個(gè)選項(xiàng)來幫助管理他們的產(chǎn)品配置是使用包管理器。包管理器允許開發(fā)人員管理他們的軟件依賴項(xiàng)。此外,包管理器可以集成到構(gòu)建系統(tǒng)中,使開發(fā)人員能夠輕松地管理他們的構(gòu)建,包括他們的配置管理。
有幾個(gè)包管理器可供使用C/C 的開發(fā)人員使用。例如,Microsoft C/C 團(tuán)隊(duì)維護(hù)了一個(gè)免費(fèi)可用的工具,稱為vcpkg,vcpkg 工具可用于集成第三方庫、框架和開源代碼或添加私有代碼。或者,conan是一個(gè)開源包管理器,也被廣泛使用。每種工具都有其優(yōu)點(diǎn)和缺點(diǎn),但無論你選擇哪一種,它們都可以非常有效地幫助管理軟件配置。
結(jié)論
很久以前,嵌入式軟件已經(jīng)從簡單的小控制應(yīng)用程序升級(jí)為通常需要復(fù)雜配置管理的復(fù)雜系統(tǒng)。條件編譯等舊技術(shù)在小型項(xiàng)目中可能會(huì)有所幫助,但隨著復(fù)雜性和規(guī)模的增長,嵌入式開發(fā)人員需要尋找更現(xiàn)代的工具。例如,包管理器和自動(dòng)生成的配置文件可以極大地幫助改進(jìn)系統(tǒng)的配置管理。但是,當(dāng)然,成功使用這些工具依賴于紀(jì)律嚴(yán)明的團(tuán)隊(duì),畢竟,誰想追逐生成配置的腳本中的錯(cuò)誤?
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。