毫無疑問,當(dāng)您開始在開發(fā)中使用實時操作系統(tǒng) (RTOS) 時,會有一條學(xué)習(xí)曲線。您將在更高的抽象級別上工作,使用或多或少的并行任務(wù)而不僅僅是子例程,并且您將需要考慮您的任務(wù)應(yīng)如何共享數(shù)據(jù)和處理器時間。您需要為這些任務(wù)分配運行時優(yōu)先級,最好的解決方案是什么并不是很明顯。最后但同樣重要的是,您需要學(xué)習(xí)如何使用 RTOS 本身,例如用于控制任務(wù)和在它們之間進行通信的配置和 API 函數(shù)。
一旦你掌握了所有這些并且你正在編寫你的代碼,就到了下一個學(xué)習(xí)曲線的時候了——你現(xiàn)在也必須學(xué)習(xí)如何調(diào)試你的代碼。
調(diào)試 RTOS 系統(tǒng)(通常使用搶占式多任務(wù)處理)與調(diào)試您自己編寫所有代碼的單線程“超級循環(huán)”系統(tǒng)有幾個不同的原因,但我想說兩個主要原因是
由于多個任務(wù)交互并競爭共享資源,軟件行為可能會受到軟件時序和 RTOS 調(diào)度行為的影響,而在源代碼中是不可見的。
您不再直接控制程序流程——任務(wù)切換可能隨時隨地發(fā)生。
這些問題真的沒有辦法解決。您將不得不處理它們,因為您必須信任操作系統(tǒng)來安排您的任務(wù)和管理計時器。一些任務(wù)切換可能是可預(yù)測的,因此是已知的,但通常您不知道它們會在程序流的哪個位置發(fā)生。隨著系統(tǒng)中任務(wù)/線程數(shù)量的增加,組合的數(shù)量也在增加——可能存在大量可能的執(zhí)行場景,具有不同的時間和執(zhí)行順序,其中大多數(shù)都可以正常工作。但是,您的一位客戶報告了“噩夢錯誤”,只有在條件合適時才會出現(xiàn),您無法重現(xiàn)。
下面的邊欄列出了一些典型癥狀,如果您有與 RTOS 相關(guān)的時序錯誤,您可能會看到這些癥狀。請注意,其中許多問題通常具有一定程度的隨機性;問題有時會出現(xiàn),但并非總是如此。
依賴于時間的錯誤很難重現(xiàn)或發(fā)現(xiàn),尤其是因為大多數(shù)調(diào)試工具對多任務(wù)問題的支持很少。在我看來,大多數(shù)工具仍然專注于靜態(tài)停止系統(tǒng),而不是動態(tài)軟件行為。相比之下,許多系統(tǒng)具有實時要求,并且無法停止調(diào)試。
RTOS 相關(guān)時序錯誤的一些典型癥狀
任務(wù)可以單獨工作,但不能作為一個完整的系統(tǒng)
性能緩慢
系統(tǒng)鎖定,或有時停止響應(yīng)
系統(tǒng)看起來很脆弱——微小的變化會導(dǎo)致奇怪的錯誤
輸出時序的隨機變化
有時數(shù)據(jù)損壞或輸出錯誤
隨機崩潰/硬故障
除了尋找癥狀之外,您當(dāng)然應(yīng)該使用您擁有的任何工具以及它們提供的工具來檢查您的 RTOS 和應(yīng)用程序是否存在錯誤和不當(dāng)行為。例如,您的 IDE 可能支持在調(diào)試期間輕松檢查 RTOS 對象(有時通過插件),甚至可以分析任務(wù)的堆棧使用情況。RTOS 可以讓您在較高級別測量 CPU 使用率,讓您了解每個任務(wù)平均需要多少 CPU 時間。一些調(diào)試器可以在系統(tǒng)執(zhí)行時實時呈現(xiàn)變量(“實時監(jiān)視”),盡管這可能不適合快速變化的變量。
如果您想查看應(yīng)用程序和 RTOS 內(nèi)部實際發(fā)生的事情的可靠時間線,您需要能夠在事件發(fā)生時記錄事情的 RTOS 感知跟蹤,以及可以幫助您理解跟蹤信息的工具。
審核編輯:郭婷
-
cpu
+關(guān)注
關(guān)注
68文章
11048瀏覽量
216121 -
RTOS
+關(guān)注
關(guān)注
24文章
844瀏覽量
120819
發(fā)布評論請先 登錄
詳解RTOS中的Hook函數(shù)
RTOS中的本地存儲指針使用

請問ADS42LB49模擬地AGND和數(shù)字地DGND是如何處理?
RTOS中的錯誤檢查機制
RTOS正在縮小與Linux的差距

數(shù)字地和模擬地如何處理
SMT錫膏加工中如何處理缺陷?

freertos和rtos區(qū)別是什么
RTOS系統(tǒng)在國產(chǎn)工業(yè)級HMI芯片Model系列中的深度應(yīng)用與性能優(yōu)化

RTOS的特性和類型
簡單認識RTOS實時操作系統(tǒng)
請問比較器不用的引腳如何處理比較好?
什么是實時操作系統(tǒng)(3)-在 RTOS 中可以期待什么?

評論