多線程 RTOS 應用程序的一個更被低估的方面是您不能只查看代碼來完全了解應用程序的工作原理。
你需要知道它的各個部分是如何相互通信的,并且你需要很多其他信息:任務執行需要多長時間,是否有任何潛在的競爭條件或死鎖,你是否滿足你的時間要求等等。
您希望代碼做什么和它實際做什么可能在許多方面有所不同,這些方面既難以在代碼中看到,也難以測試。這對所有使用多線程代碼的開發人員來說都是一個挑戰,無論他們使用的是 RTOS 還是 Linux,最好使用可視化跟蹤診斷工具進行管理,讓您深入了解我所說的代碼的“黑暗面”——您可以從字面上理解看看它在執行時的行為。
視覺時間線是一個很好的起點。在許多情況下,查看隨時間分布的軟件事件、消息和任務執行很重要,例如當錯誤的精確位置從癥狀中不明顯時——計算機可能在數字處理和文本日志中搜索方面表現出色,但通常你不知道要搜索什么。在視覺模式識別方面,人腦表現出色。
顯示軟件事件的可視化時間線可以讓您大致了解嵌入式應用程序的內部工作原理,如果您需要深入挖掘以查找錯誤,這是一個很好的起點。
調試時更好的洞察力意味著將有更少的猜測,并且更有可能找到根本原因。在無法使用傳統方法(如在斷點處暫停系統)的情況下,它也是一個很大的幫助。
你說 printf 調試怎么樣?是的,printf 很容易部署,有時它確實是你所需要的,但它的價格很高。將調試打印輸出放在對時間敏感的應用程序代碼中是有風險的,并且不能很好地擴展到更復雜的應用程序和更快的處理器。此外, printf 通常非常慢,每次打印輸出大約為幾毫秒。相比之下,針對軟件事件跟蹤的優化解決方案可以比這快大約 100 倍,允許您在同一時期收集更多信息。
確保在整個開發項目中測量時間和性能。做得對,這可以確保您可以在開發過程中發現并解決任何問題,而不是在承諾的交付日期之前與時間賽跑。
滿足時序規范對于具有嚴格要求的實時系統至關重要,但對于幾乎所有嵌入式系統的用戶體驗也很重要。沒有人喜歡遲緩的觸摸屏或無法提供承諾吞吐量的慢速 wifi 路由器。同樣,根本原因從源代碼中可能并不明顯,如果真正的問題是糟糕的軟件設計,那么簡單地切換到更快的處理器可能沒有任何好處。
如果你發現自己在一個項目中“調試地獄”,大量的調試會消耗房間里的所有能量并阻止項目向前推進,那么視覺跟蹤診斷可以幫助你。在基于 RTOS 的應用程序的軟件設計中未能遵循最佳實踐通常是一個主要的促成因素,并且它可能以例如性能差、處理器負載高或瞬態錯誤的形式出現。任務之間的大量依賴是另一個可以改進設計的常見信號。
即使是架構糟糕的系統也可能在今天運行,但它們將具有復雜和混亂的行為以及較差的可測試性,這增加了泄漏到生產設備中的難以捉摸的錯誤的風險。而且它們幾乎肯定會很脆弱,因此代碼或環境中的微小變化都會導致它們失敗。
可視化跟蹤診斷幫助開發人員分析和改進他們的軟件設計,確保系統行為穩定可靠。當您可以更早地發現軟件設計缺陷時,修復它們所需的更改就會更少。設計改進還可以帶來更好的系統性能和響應能力,這反過來又可以讓您選擇更具成本效益的處理器來降低 BoM 成本或使用更低的時鐘頻率來延長電池壽命。
使用您的跟蹤工具將跟蹤數據連續流式傳輸到主機,如果需要,您可以在其中存儲很長的記錄,甚至在屏幕上實時顯示數據。跟蹤流使您能夠監控系統測試或尋找難以重現的罕見錯誤。視覺跟蹤診斷允許在高級視覺概覽中發現異常并深入到特定事件以準確找出發生了什么。
最后,可視化跟蹤診斷可以實現為純軟件解決方案,不需要額外的硬件,甚至不需要調試探針。在內存和處理器使用方面存在成本,但通常不會超過您可以在整個開發、測試甚至部署過程中將其保留在系統中(如果您愿意)。在所有階段都能獲得這些信息意味著每個人每天都能從中受益。
這種方法允許記錄來自應用程序的任何相關信息,包括在運行時未公開的內部數據和狀態。數據可以與可視化執行時間線并行繪制,以便在運行時深入了解您的應用程序。這樣,您就可以制作出能夠擊敗競爭對手的出色產品。
遵循這五個最佳實踐,在系統級別獲得對實時行為所需的可見性,以提高產品質量并加快開發速度,從而更快地進入市場。
審核編輯:郭婷
-
處理器
+關注
關注
68文章
19409瀏覽量
231196 -
RTOS
+關注
關注
22文章
819瀏覽量
119889 -
代碼
+關注
關注
30文章
4828瀏覽量
69058
發布評論請先 登錄
相關推薦
socket 多線程編程實現方法
Python中多線程和多進程的區別
![Python中<b class='flag-5'>多線程</b>和多進程的區別](https://file1.elecfans.com/web2/M00/0A/EF/wKgaomcYcmaAS08XAAAsH7JtzO0544.png)
RTOS的特性和類型
RTOS開發最佳實踐
從多線程設計模式到對 CompletableFuture 的應用
![從<b class='flag-5'>多線程</b>設計模式到對 CompletableFuture 的應用](https://file1.elecfans.com//web2/M00/F3/06/wKgZomZ7sqGAdXtoAASyuO6RCrc135.png)
動態線程池思想學習及實踐
![動態<b class='flag-5'>線程</b>池思想學習及<b class='flag-5'>實踐</b>](https://file1.elecfans.com//web2/M00/EE/36/wKgaomZqouqAcvrSAAEC2xF7olE477.png)
bootloader開多線程做引導程序,跳app初始化后直接進hardfualt,為什么?
鴻蒙OS開發實例:【ArkTS類庫多線程CPU密集型任務TaskPool】
![鴻蒙OS開發實例:【ArkTS類庫<b class='flag-5'>多線程</b>CPU密集型任務TaskPool】](https://file1.elecfans.com/web2/M00/C6/C5/wKgaomYCyYKAZp6HAAB4LWPdpdQ014.jpg)
鴻蒙APP開發:【ArkTS類庫多線程】TaskPool和Worker的對比
![鴻蒙APP開發:【ArkTS類庫<b class='flag-5'>多線程</b>】TaskPool和Worker的對比](https://file1.elecfans.com/web2/M00/C5/CD/wKgZomYCdwyAIFf5AAB_7E1pFms943.jpg)
鴻蒙原生應用開發-ArkTS語言基礎類庫多線程TaskPool和Worker的對比(一)
【從0開始創建AWTK應用程序】編譯應用到RTOS平臺
![【從0開始創建AWTK<b class='flag-5'>應用程序</b>】編譯應用到<b class='flag-5'>RTOS</b>平臺](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
基于RTOS的應用進程中的典型線程
![基于<b class='flag-5'>RTOS</b>的應用進程中的典型<b class='flag-5'>線程</b>](https://file1.elecfans.com/web2/M00/C2/99/wKgZomXmdqyABnTCAAAd3L3-gXs236.png)
評論