通過儀器提高固件質(zhì)量 ,如何以及何時添加代碼儀器
如何以及何時添加代碼儀器
成功代碼儀器的關(guān)鍵是找到適當(dāng)?shù)钠胶?。有必要收集足夠的信息以有效,而不會顯著影響性能或代碼復(fù)雜性。
儀器不僅應(yīng)視為調(diào)試工具,還應(yīng)將儀器視為驗證和優(yōu)化嵌入式系統(tǒng)及其環(huán)境的一種手段(例如,其內(nèi)置的設(shè)備)。它確保系統(tǒng)按預(yù)期工作。就像將測試點添加到硬件一樣,儀器應(yīng)嵌入固件中。項目越復(fù)雜,專注于測試的需求就越大。開發(fā)人員應(yīng)確保日志捕獲相關(guān)數(shù)據(jù),例如可變值,狀態(tài)和錯誤消息,以快速識別問題。解決癥狀而不了解根本原因可能導(dǎo)致反復(fù)出現(xiàn)的問題。固件模塊的儀器可以是多個項目的寶貴長期投資,因為它可以加快調(diào)試和測試。
通常,代碼應(yīng)不遲于集成階段的儀器,以盡早發(fā)現(xiàn)錯誤或效率低下,并減少在最后階段的嚴(yán)重問題,重新設(shè)計和延遲的風(fēng)險。在計劃儀器時,必須確定以下內(nèi)容。
1。應(yīng)該儀器進(jìn)行儀器的哪些部分(任務(wù)/應(yīng)用程序代碼,RTO,驅(qū)動程序,異常處理程序等)以及應(yīng)記錄哪些數(shù)據(jù)和事件?在代碼部分中包括儀器可能會引起問題,因此當(dāng)問題以后發(fā)生時,當(dāng)我們不再使用調(diào)試探測器訪問嵌入式系統(tǒng)時,它將存在。
2。圓形緩沖區(qū)對記錄數(shù)據(jù)的大小(歷史的長度取決于我們可以專用于其的內(nèi)存量)?
3。應(yīng)該包裝數(shù)據(jù)以在相同數(shù)量的內(nèi)存中獲得更長或更詳細(xì)的歷史記錄嗎?
4。減少數(shù)據(jù)泛濫:實時系統(tǒng)生成大量數(shù)據(jù)。僅能激活那些對于特定類型的測試很重要的數(shù)據(jù)集很重要。否則,要么歷史記錄太短,要么由于主機帶寬不足而導(dǎo)致數(shù)據(jù)丟失。
5。如何記錄致命錯誤和系統(tǒng)異常,重置/重新啟動原因以及其他與系統(tǒng)相關(guān)的信息?
6。應(yīng)該支持哪些記錄方法?流媒體模式,將數(shù)據(jù)連續(xù)傳輸?shù)街鳈C;驗尸模式,數(shù)據(jù)覆蓋圓形緩沖區(qū)中最古老的條目;單桿模式,緩沖區(qū)線性填充直到完整為止;還是以上所有?
7。當(dāng)調(diào)試探針斷開連接時,如何將記錄的數(shù)據(jù)傳輸?shù)街鳈C?
8。開發(fā)人員是否應(yīng)該能夠通過確定捕獲哪些數(shù)據(jù)以及何時捕獲數(shù)據(jù)來控制數(shù)據(jù)記錄?鑒于圓形緩沖區(qū)的大小有限,并且數(shù)據(jù)傳輸速度有限,因此使用過濾器和觸發(fā)器捕獲特定數(shù)據(jù)是非常有益的。
9.應(yīng)該監(jiān)視哪些資源(例如,內(nèi)存池)?
結(jié)論
代碼儀器對于復(fù)雜的嵌入式系統(tǒng)非常重要,應(yīng)成為固件可靠性和可檢驗性策略設(shè)計的一部分。正確測試和有效調(diào)試的關(guān)鍵是可觀察性,系統(tǒng)影響最小。儀器的目的不僅應(yīng)該是查找錯誤,而且主要是要驗證代碼應(yīng)盡其所能,包括實時正時約束。我們必須衡量想要改進(jìn)的東西。代碼質(zhì)量和可靠性對于所有嵌入式系統(tǒng),而不僅僅是高融合系統(tǒng)都很重要。由于不經(jīng)常發(fā)生和缺乏歷史數(shù)據(jù),因此在測試或現(xiàn)場試驗期間可能會隨機駁斥難以釋放的問題,但它們經(jīng)常浮出水面,尤其是隨著系統(tǒng)部署的增加。所以,在實驗室測試期間,一旦產(chǎn)品進(jìn)入現(xiàn)場,必須提供性能歷史記錄。
該軟件生成的跟蹤不需要任何特殊的硬件,可以在實驗室和部署的產(chǎn)品中使用,例如在航空中的黑匣子。它捕獲任何數(shù)據(jù),例如本地變量,功能參數(shù)或異常轉(zhuǎn)儲,而硬件跟蹤通常僅限于控制流和全局?jǐn)?shù)據(jù),需要高速跟蹤端口和專門的調(diào)試探測器。儀器可以通過對導(dǎo)致斷點或系統(tǒng)例外的歷史的細(xì)粒度看待傳統(tǒng)調(diào)試來補充傳統(tǒng)調(diào)試。
以下文章將介紹一個新的最小侵入性和高度靈活的開源工具包,用于從資源受限到大型RTO的所有類型項目的儀器。
附錄1:當(dāng)前代碼儀器解決方案的缺點
不同的項目有不同的儀器需求。例如,由于執(zhí)行緩慢,對于一個項目而言,對另一個項目的執(zhí)行緩慢可能完全適合另一個項目,而并非所有嵌入式系統(tǒng)都具有嚴(yán)重的內(nèi)存限制。使用最簡單的方法獲得所需的測試結(jié)果很重要。隨著項目變得更加復(fù)雜和實時要求,測試問題和工具要求也會增加。
這篇評論是針對對現(xiàn)有解決方案局限性感興趣的人。儀器方法在功能和資源使用方面差異很大,每種方法都有不同程度的缺點。此說明適用于在將其發(fā)送到主機之前在RAM中緩沖數(shù)據(jù)的解決方案。 printf()方法很簡單,但通常非誘因,緩慢且內(nèi)存密集型(使用大量程序內(nèi)存和堆??臻g)。即使是有限的功能版本的printf()也需要字符串和高帶寬的內(nèi)存,以將數(shù)據(jù)傳輸?shù)街鳈C。更好的解決方案與printf字符串記錄應(yīng)用程序數(shù)據(jù),并脫機地將它們解碼。但是,將字符串復(fù)制到圓形緩沖區(qū)會添加CPU開銷,并消耗RAM和程序內(nèi)存。單個數(shù)據(jù)記錄解決方案具有或多或少的以下缺點。
?日志記錄功能的緩慢執(zhí)行 - 例如,日志記錄一次一次處理數(shù)據(jù)8位,對于現(xiàn)代32位嵌入式系統(tǒng)而言,這很慢。
?非倫敦記錄功能,無法記錄多任務(wù)或中斷/異常。
?阻止功能 - 例如,如果在較低的優(yōu)先級功能將數(shù)據(jù)寫入緩沖區(qū)時發(fā)生中斷,則中斷程序無法捕獲數(shù)據(jù),因為捕獲被阻止,直到較低的優(yōu)先級功能完成編寫事件數(shù)據(jù)。
?記錄RTOS事件很快,但是記錄應(yīng)用程序特定的事件和數(shù)據(jù)很慢,因為它依賴于printf樣功能。這種方法要求將printf字符串復(fù)制到圓形緩沖區(qū)中,該緩沖區(qū)消耗了寶貴的空間,并限制了可以存儲的歷史數(shù)據(jù)量。
?必須手動分配特定于應(yīng)用程序的事件代碼。
?過度使用程序內(nèi)存通常是由嵌入式系統(tǒng)中printf字符串的相對較大的數(shù)據(jù)記錄功能和/或存儲引起的。
?對于基于RTOS的應(yīng)用程序,過多的堆棧使用尤其有問題。這是因為必須為調(diào)用記錄功能的每個任務(wù)分配其他堆??臻g。此外,現(xiàn)有項目的儀器可能導(dǎo)致堆棧溢出。
?某些解決方案需要在數(shù)據(jù)寫入圓形緩沖區(qū)期間被禁用。在受MPU保護的RTO中,任務(wù)不能禁用中斷,從而使高融合應(yīng)用程序不可能進(jìn)行數(shù)據(jù)記錄。
?數(shù)據(jù)不能導(dǎo)出或只能手動導(dǎo)出。數(shù)據(jù)解碼不能輕易自定義,并且輸出以多種格式分類為多種格式,以使用最合適的工具進(jìn)行有效分析。更好地了解大量未排序數(shù)據(jù)需要復(fù)雜的自定義工具。
?無法記錄所有類型的數(shù)據(jù)。但是,重要的是記錄任何可以幫助識別或診斷問題的數(shù)據(jù)。
?使用動態(tài)分配的緩沖區(qū)和/或不一致的邊界檢查,這不適用于高融合系統(tǒng)。
?數(shù)據(jù)沒有時間戳(無法定時分析)。
?缺少或有限的過濾功能:通常僅在編譯時間而不是在系統(tǒng)操作期間進(jìn)行消息過濾(如果主機的帶寬不足或需要更長或更詳細(xì)的歷史記錄)。
?所有數(shù)據(jù)都寫入單個日志文件,由于數(shù)據(jù)泛濫,該文件對于手動檢查變得太大。
?可移植性差(不可攜帶的記錄庫代碼或缺乏對特定CPU核心或硬件的支持),因此不能用于所有系統(tǒng)。
?解決方案不適合高融合項目(例如功能安全)。
?有限的范圍:某些儀器解決方案可能會集中在特定方面,例如性能或調(diào)試,而無需提供系統(tǒng)的整體視圖。
?高許可成本或?qū)⒔鉀Q方案與特定的調(diào)試探針,IDE或工具鏈聯(lián)系起來。
?具有大量數(shù)據(jù)記錄功能/宏和陡峭學(xué)習(xí)曲線的復(fù)雜解決方案。