如果你曾經(jīng)開(kāi)發(fā)過(guò)嵌入式軟件,你就會(huì)知道典型的嵌入式構(gòu)建系統(tǒng)只有兩種構(gòu)建配置:調(diào)試和發(fā)布。事實(shí)上,你可能大部分時(shí)間都只使用調(diào)試構(gòu)建。Rust構(gòu)建系統(tǒng)在測(cè)試中走得更遠(yuǎn)。但是,你知道有五種基本的構(gòu)建配置應(yīng)該使用嗎?讓我們探討一下你和你的嵌入式開(kāi)發(fā)團(tuán)隊(duì)可以使用的不同嵌入式構(gòu)建系統(tǒng)配置,以確保你更快地開(kāi)發(fā)軟件。
構(gòu)建系統(tǒng)配置1—分析
我們要討論的第一個(gè)嵌入式構(gòu)建系統(tǒng)配置是分析構(gòu)建。開(kāi)發(fā)高質(zhì)量的嵌入式軟件需要你審查和分析你的軟件。你應(yīng)該問(wèn)這樣的問(wèn)題:
l我的函數(shù)的圈復(fù)雜度是多少?
l我的代碼的耦合性是什么?
l我的任務(wù)是否以正確的速度執(zhí)行?
l我最差的CPU負(fù)載是多少?
l我是否通過(guò)了正確性和編碼標(biāo)準(zhǔn)的靜態(tài)代碼分析測(cè)試?
許多構(gòu)建時(shí)檢查可以在代碼上執(zhí)行,通常委托給手工評(píng)審或者推給CI/CD。通常,在提交代碼之前,我會(huì)運(yùn)行我的分析構(gòu)建。構(gòu)建將運(yùn)行我所有的靜態(tài)、動(dòng)態(tài)和度量檢查,以確保我的代碼處于提交到DevOps系統(tǒng)的正確狀態(tài)。
構(gòu)建系統(tǒng)配置2—模擬
模擬應(yīng)用程序代碼是開(kāi)發(fā)嵌入式軟件最沒(méi)有得到充分利用的技術(shù)。你的構(gòu)建系統(tǒng)應(yīng)該具有允許你在你的主機(jī)環(huán)境上構(gòu)建模擬軟件的配置。你不一定需要一個(gè)目標(biāo)模擬器;你可以通過(guò)在主機(jī)上運(yùn)行應(yīng)用程序代碼來(lái)驗(yàn)證它。模擬有很多優(yōu)點(diǎn),例如:
l提高了時(shí)間效率——你不必等待硬件的到來(lái),無(wú)需franken-boards,并且消除了bug-flash-debug循環(huán)。
l靈活性和可擴(kuò)展性–你必須使用硬件抽象層(HALs)分離代碼并提高可重用性。
l降低開(kāi)發(fā)成本–在主機(jī)環(huán)境中調(diào)試和解決問(wèn)題的速度比在嵌入式目標(biāo)上更快。
嵌入式開(kāi)發(fā)人員通常認(rèn)為他們不能模擬他們的軟件,因?yàn)樗佑|到了硬件。然而,精心制作的軟件架構(gòu)可以實(shí)現(xiàn)模擬和目標(biāo)執(zhí)行。此外,像DevOps的CI/CD技術(shù)這樣的現(xiàn)代技術(shù)迫使許多團(tuán)隊(duì)重新思考他們?nèi)绾卧O(shè)計(jì)他們的軟件來(lái)更好地管理他們的硬件依賴(lài)。所以如果你追求DevOps,增加一個(gè)模擬構(gòu)建是很自然的擴(kuò)展。
構(gòu)建系統(tǒng)配置3—測(cè)試
如果你一直致力于現(xiàn)代化你的嵌入式軟件過(guò)程,那么你可能已經(jīng)遇到或創(chuàng)建了你的測(cè)試構(gòu)建配置。測(cè)試配置是關(guān)于運(yùn)行單元測(cè)試、集成測(cè)試,甚至可能是系統(tǒng)級(jí)測(cè)試(盡管我通常把它推到CI/CD過(guò)程中)。
當(dāng)你創(chuàng)建一個(gè)測(cè)試構(gòu)建配置時(shí),你將集成一個(gè)運(yùn)行該構(gòu)建的測(cè)試工具。測(cè)試工具通常為你的主機(jī)編譯,而不是為你的目標(biāo)編譯,但是這取決于你的需要。與模擬一樣,你需要一個(gè)良好的HAL和解耦來(lái)在主機(jī)上測(cè)試你的應(yīng)用程序代碼。不過(guò),要小心;單元測(cè)試不是模擬。模擬就是在主機(jī)上運(yùn)行代碼,就像在目標(biāo)上一樣。單元測(cè)試是關(guān)于運(yùn)行單獨(dú)的受控測(cè)試,以確保單個(gè)模塊按預(yù)期工作。
構(gòu)建系統(tǒng)配置5—調(diào)試
調(diào)試配置是你久經(jīng)考驗(yàn)的嵌入式構(gòu)建系統(tǒng)配置。如果你在一個(gè)工程部門(mén)的地板上走來(lái)走去,你經(jīng)常會(huì)發(fā)現(xiàn)嵌入式開(kāi)發(fā)人員愉快地單步調(diào)試他們的軟件代碼。不幸的是,這可能是一個(gè)嵌入式開(kāi)發(fā)人員在大多數(shù)時(shí)候所能做的最糟糕的事情(有時(shí),這種調(diào)試時(shí)間是必要的)。
調(diào)試版本通常在映像中包含更多的信息,因此開(kāi)發(fā)人員可以四處查看并進(jìn)行調(diào)試。問(wèn)題是大多數(shù)應(yīng)用程序代碼可以在主機(jī)上調(diào)試得更好。調(diào)試構(gòu)建通常會(huì)降低開(kāi)發(fā)人員的速度,并鼓勵(lì)糟糕的調(diào)試實(shí)踐。它們對(duì)于驅(qū)動(dòng)開(kāi)發(fā)來(lái)說(shuō)是不可避免的,但是大多數(shù)團(tuán)隊(duì)都在使用他們芯片供應(yīng)商的驅(qū)動(dòng)代碼,所以使用一個(gè)好的HAL,你就可以模擬或者測(cè)試你的bug。
嵌入式構(gòu)建系統(tǒng)結(jié)論
調(diào)試構(gòu)建配置并不是嵌入式軟件團(tuán)隊(duì)唯一可用的配置。事實(shí)上,希望你已經(jīng)意識(shí)到,分析、測(cè)試和模擬構(gòu)建配置的使用可能更有價(jià)值和效率。訣竅是將嵌入式軟件和固件僅僅視為軟件。與在嵌入式開(kāi)發(fā)目標(biāo)上相比,在MacOS、Linux或Windows上測(cè)試適當(dāng)分層、分離和抽象的應(yīng)用程序代碼更容易。希望你仔細(xì)考慮這些構(gòu)建配置,并制定一個(gè)行動(dòng)計(jì)劃,開(kāi)始將它們集成到你的構(gòu)建過(guò)程中。