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