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