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