吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

多線程RTOS應用程序的五個最佳實踐

星星科技指導員 ? 來源:嵌入式計算設計 ? 作者:Dr. Johan Kraft ? 2022-06-21 09:45 ? 次閱讀

多線程 RTOS 應用程序的一個更被低估的方面是您不能只查看代碼來完全了解應用程序的工作原理

你需要知道它的各個部分是如何相互通信的,并且你需要很多其他信息:任務執行需要多長時間,是否有任何潛在的競爭條件或死鎖,你是否滿足你的時間要求等等。

您希望代碼做什么和它實際做什么可能在許多方面有所不同,這些方面既難以在代碼中看到,也難以測試。這對所有使用多線程代碼的開發人員來說都是一個挑戰,無論他們使用的是 RTOS 還是 Linux,最好使用可視化跟蹤診斷工具進行管理,讓您深入了解我所說的代碼的“黑暗面”——您可以從字面上理解看看它在執行時的行為。

視覺時間線是一個很好的起點。在許多情況下,查看隨時間分布的軟件事件、消息和任務執行很重要,例如當錯誤的精確位置從癥狀中不明顯時——計算機可能在數字處理和文本日志中搜索方面表現出色,但通常你不知道要搜索什么。在視覺模式識別方面,人腦表現出色。

poYBAGKxIueAGXUIAAHh_MLBOpY601.png

顯示軟件事件的可視化時間線可以讓您大致了解嵌入式應用程序的內部工作原理,如果您需要深入挖掘以查找錯誤,這是一個很好的起點。

調試時更好的洞察力意味著將有更少的猜測,并且更有可能找到根本原因。在無法使用傳統方法(如在斷點處暫停系統)的情況下,它也是一個很大的幫助。

你說 printf 調試怎么樣?是的,printf 很容易部署,有時它確實是你所需要的,但它的價格很高。將調試打印輸出放在對時間敏感的應用程序代碼中是有風險的,并且不能很好地擴展到更復雜的應用程序和更快的處理器。此外, printf 通常非常慢,每次打印輸出大約為幾毫秒。相比之下,針對軟件事件跟蹤的優化解決方案可以比這快大約 100 倍,允許您在同一時期收集更多信息。

確保在整個開發項目中測量時間和性能。做得對,這可以確保您可以在開發過程中發現并解決任何問題,而不是在承諾的交付日期之前與時間賽跑。

滿足時序規范對于具有嚴格要求的實時系統至關重要,但對于幾乎所有嵌入式系統的用戶體驗也很重要。沒有人喜歡遲緩的觸摸屏或無法提供承諾吞吐量的慢速 wifi 路由器。同樣,根本原因從源代碼中可能并不明顯,如果真正的問題是糟糕的軟件設計,那么簡單地切換到更快的處理器可能沒有任何好處。

如果你發現自己在一個項目中“調試地獄”,大量的調試會消耗房間里的所有能量并阻止項目向前推進,那么視覺跟蹤診斷可以幫助你。在基于 RTOS 的應用程序的軟件設計中未能遵循最佳實踐通常是一個主要的促成因素,并且它可能以例如性能差、處理器負載高或瞬態錯誤的形式出現。任務之間的大量依賴是另一個可以改進設計的常見信號

即使是架構糟糕的系統也可能在今天運行,但它們將具有復雜和混亂的行為以及較差的可測試性,這增加了泄漏到生產設備中的難以捉摸的錯誤的風險。而且它們幾乎肯定會很脆弱,因此代碼或環境中的微小變化都會導致它們失敗。

可視化跟蹤診斷幫助開發人員分析和改進他們的軟件設計,確保系統行為穩定可靠。當您可以更早地發現軟件設計缺陷時,修復它們所需的更改就會更少。設計改進還可以帶來更好的系統性能和響應能力,這反過來又可以讓您選擇更具成本效益的處理器來降低 BoM 成本或使用更低的時鐘頻率來延長電池壽命。

使用您的跟蹤工具將跟蹤數據連續流式傳輸到主機,如果需要,您可以在其中存儲很長的記錄,甚至在屏幕上實時顯示數據。跟蹤流使您能夠監控系統測試或尋找難以重現的罕見錯誤。視覺跟蹤診斷允許在高級視覺概覽中發現異常并深入到特定事件以準確找出發生了什么。

最后,可視化跟蹤診斷可以實現為純軟件解決方案,不需要額外的硬件,甚至不需要調試探針。在內存和處理器使用方面存在成本,但通常不會超過您可以在整個開發、測試甚至部署過程中將其保留在系統中(如果您愿意)。在所有階段都能獲得這些信息意味著每個人每天都能從中受益。

這種方法允許記錄來自應用程序的任何相關信息,包括在運行時未公開的內部數據和狀態。數據可以與可視化執行時間線并行繪制,以便在運行時深入了解您的應用程序。這樣,您就可以制作出能夠擊敗競爭對手的出色產品

遵循這五個最佳實踐,在系統級別獲得對實時行為所需的可見性,以提高產品質量并加快開發速度,從而更快地進入市場。

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19409

    瀏覽量

    231196
  • RTOS
    +關注

    關注

    22

    文章

    819

    瀏覽量

    119889
  • 代碼
    +關注

    關注

    30

    文章

    4828

    瀏覽量

    69058
收藏 人收藏

    評論

    相關推薦

    socket 多線程編程實現方法

    是指在同一進程中運行多個線程,每個線程可以獨立執行任務。線程共享進程的資源,如內存空間和文件句柄,但每個線程有自己的
    的頭像 發表于 11-12 14:16 ?469次閱讀

    Python中多線程和多進程的區別

    Python作為一種高級編程語言,提供了多種并發編程的方式,其中多線程與多進程是最常見的兩種方式之一。在本文中,我們將探討Python中多線程與多進程的概念、區別以及如何使用線程池與進程池來提高并發執行效率。
    的頭像 發表于 10-23 11:48 ?495次閱讀
    Python中<b class='flag-5'>多線程</b>和多進程的區別

    RTOS的特性和類型

    實時操作系統(RTOS)是一種可運行實時計算應用程序的軟件平臺,用于處理具有明確時間約束的事件和數據。與通用操作系統(GPOS)不同,RTOS必須在有限的硬件資源上調度應用程序之間的處
    的頭像 發表于 08-20 11:29 ?705次閱讀

    RTOS開發最佳實踐

    基于RTOS編寫應用程序時,有一些要注意事項。在本節中,您將學習RTOS開發最佳實踐,例如POSIX合規性、安全性和功能安全認證。
    的頭像 發表于 08-20 11:24 ?517次閱讀

    ESP32會不會有多線程問題,需要加鎖嗎?

    ESP32會不會有多線程問題,需要加鎖嗎
    發表于 07-19 08:05

    多線程設計模式到對 CompletableFuture 的應用

    最近在開發 延保服務 頻道頁時,為了提高查詢效率,使用到了多線程技術。為了對多線程方案設計有更加充分的了解,在業余時間讀完了《圖解 Java 多線程設計模式》這本書,覺得收獲良多。本篇文章將介紹其中
    的頭像 發表于 06-26 14:18 ?432次閱讀
    從<b class='flag-5'>多線程</b>設計模式到對 CompletableFuture 的應用

    動態線程池思想學習及實踐

    相關文檔 美團線程實踐:https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html 線程池思想解析:https
    的頭像 發表于 06-13 15:43 ?1245次閱讀
    動態<b class='flag-5'>線程</b>池思想學習及<b class='flag-5'>實踐</b>

    bootloader開多線程做引導程序,跳app初始化后直接進hardfualt,為什么?

    如標題,想做一遠程升級的項目,bootloader引導區域和app都是開多線程跑的,就是自己寫了小的任務調度器,沒什么功能主要是想讓程序快速的響應,延時不會對其他
    發表于 04-18 06:07

    鴻蒙OS開發實例:【ArkTS類庫多線程CPU密集型任務TaskPool】

    CPU密集型任務是指需要占用系統資源處理大量計算能力的任務,需要長時間運行,這段時間會阻塞線程其它事件的處理,不適宜放在主線程進行。例如圖像處理、視頻編碼、數據分析等。 基于多線程并發機制處理CPU密集型任務可以提高CPU
    的頭像 發表于 04-01 22:25 ?901次閱讀
    鴻蒙OS開發實例:【ArkTS類庫<b class='flag-5'>多線程</b>CPU密集型任務TaskPool】

    鴻蒙APP開發:【ArkTS類庫多線程】TaskPool和Worker的對比

    TaskPool(任務池)和Worker的作用是為應用程序提供一多線程的運行環境,用于處理耗時的計算任務或其他密集型任務。可以有效地避免這些任務阻塞主線程,從而最大化系統的利用率,降
    的頭像 發表于 03-26 22:09 ?709次閱讀
    鴻蒙APP開發:【ArkTS類庫<b class='flag-5'>多線程</b>】TaskPool和Worker的對比

    鴻蒙原生應用開發-ArkTS語言基礎類庫多線程TaskPool和Worker的對比(一)

    TaskPool(任務池)和Worker的作用是為應用程序提供一多線程的運行環境,用于處理耗時的計算任務或其他密集型任務。可以有效地避免這些任務阻塞主線程,從而最大化系統的利用率,降
    發表于 03-25 14:11

    【從0開始創建AWTK應用程序】編譯應用到RTOS平臺

    AWStudio上編寫好AWTK應用程序后,部署到RTOS平臺(如STM32)是很方便的,下面就以STM32F429型號為例子來介紹如何編譯AWTK應用到RTOS
    的頭像 發表于 03-21 08:23 ?677次閱讀
    【從0開始創建AWTK<b class='flag-5'>應用程序</b>】編譯應用到<b class='flag-5'>RTOS</b>平臺

    java實現多線程的幾種方式

    Java實現多線程的幾種方式 多線程是指程序中包含了兩或以上的線程,每個線程都可以并行執行不同
    的頭像 發表于 03-14 16:55 ?784次閱讀

    基于RTOS的應用進程中的典型線程

    RTOS中的關鍵因素是最小的中斷延遲和最小的線程切換延遲。RTOS的價值在于它的響應速度或可預測性,而不是它在給定時間段內可以執行的工作量。
    發表于 03-05 09:32 ?703次閱讀
    基于<b class='flag-5'>RTOS</b>的應用進程中的典型<b class='flag-5'>線程</b>

    AT socket可以多線程調用嗎?

    請問AT socket 可以多線程調用嗎? 有互鎖機制嗎,還是要自己做互鎖。
    發表于 03-01 08:22
    百家乐官网外套| 大发888娱乐城备用网址| 百家乐官网二路珠无敌稳赢打法 | 大发888国际娱乐bet| 尊龙百家乐官网娱乐城| 合作市| 缅甸百家乐玩家吗| 百家乐庄牌| 视频百家乐官网是真是假| bet365娱乐城注册| 百家乐赌场论坛在线| 百家乐官网群sun811| 百家乐大转轮| 网上百家乐官网假| 南投县| 德晋百家乐的玩法技巧和规则| 百家乐官网打水套利| 万安县| 大发888娱乐城游戏lm0| 澳门百家乐赢技巧| 百家乐官网哪条下路好| 云顶娱乐| 百家乐轮盘一体机厂家| 百家乐官网园qq群| 太阳城百家乐官网外挂| 88娱乐城备用网址| 新西兰百家乐的玩法技巧和规则 | 大地百家乐的玩法技巧和规则| 百家乐官网最好的投注方法 | 爱博| 威尼斯人娱乐网注册| 百家乐庄比闲多多少| 百家乐官网喜牛| 七乐百家乐官网现金网| 大发888娱乐城在线存款| 澳门1百家乐网| 红桃K百家乐官网的玩法技巧和规则| 百家乐官网路单网下载| 宝马会娱乐城返水| 威尼斯人娱乐老| 网络百家乐玩法|