毫無(wú)疑問(wèn),當(dāng)你開(kāi)始在嵌入式開(kāi)發(fā)中使用實(shí)時(shí)操作系統(tǒng)(RTOS)時(shí),會(huì)有一個(gè)學(xué)習(xí)曲線。你將在更高的抽象層次上工作,使用或多或少的并行任務(wù),而不僅僅是子例程,并且你需要考慮你的任務(wù)應(yīng)該如何彼此共享數(shù)據(jù)和處理器時(shí)間。你需要為這些任務(wù)分配運(yùn)行時(shí)優(yōu)先級(jí),而最佳解決方案并不明顯。
最后但同樣重要的是,你需要學(xué)習(xí)如何使用RTOS本身,比如配置和用于控制任務(wù)和任務(wù)間通信的API函數(shù)。
一旦你掌握了所有這些,并且你正在編寫(xiě)你的代碼,是時(shí)候進(jìn)入下一個(gè)學(xué)習(xí)曲線了——你現(xiàn)在也必須學(xué)習(xí)如何調(diào)試你的代碼。
調(diào)試RTOS系統(tǒng)(通常使用搶占式多任務(wù)處理)與調(diào)試單線程“超級(jí)循環(huán)”系統(tǒng)(所有代碼都是你自己編寫(xiě)的)不同,這有幾個(gè)原因,最重要的兩個(gè)原因是:
l 隨著多個(gè)任務(wù)相互作用并爭(zhēng)奪共享資源,軟件行為可能會(huì)受到軟件定時(shí)和RTOS調(diào)度行為的影響,而這在源代碼中是不可見(jiàn)的。
l 你不再直接控制程序流——任務(wù)開(kāi)關(guān)可能在任何地方、任何時(shí)間觸發(fā)。
這些問(wèn)題真的沒(méi)有辦法解決,你必須處理這些問(wèn)題,因?yàn)槟惚仨毿湃尾僮飨到y(tǒng)來(lái)安排任務(wù)和管理計(jì)時(shí)器。某些任務(wù)切換可能是可預(yù)測(cè)的,因此是已知的,但通常你不知道它們將在程序流中的何處發(fā)生。在嵌入式開(kāi)發(fā)中,隨著系統(tǒng)中任務(wù)/線程的數(shù)量增加,組合的數(shù)量也會(huì)增加——可能會(huì)有大量可能的執(zhí)行場(chǎng)景,具有不同的時(shí)間和執(zhí)行順序,其中大多數(shù)都會(huì)正常工作。
下面列出了一些典型的癥狀,如果你有RTOS相關(guān)的計(jì)時(shí)錯(cuò)誤,你可能會(huì)看到這些癥狀。請(qǐng)注意,這些問(wèn)題中的許多通常具有一定程度的隨機(jī)性;這個(gè)問(wèn)題有時(shí)會(huì)出現(xiàn),但并不總是出現(xiàn)。
與RTOS相關(guān)的計(jì)時(shí)錯(cuò)誤的一些典型癥狀
l 任務(wù)單獨(dú)工作很好,但作為一個(gè)完整的系統(tǒng)就不行了
l 緩慢的性能
l 系統(tǒng)鎖定,或者有時(shí)停止響應(yīng)
l 系統(tǒng)看起來(lái)很脆弱——微小的改變會(huì)導(dǎo)致奇怪的錯(cuò)誤
l 輸出時(shí)序的隨機(jī)變化
l 有時(shí)損壞的數(shù)據(jù),或錯(cuò)誤的輸出
l 隨機(jī)崩潰/硬故障
依賴(lài)于時(shí)間的錯(cuò)誤可能很難再現(xiàn)或發(fā)現(xiàn),尤其是因?yàn)榇蠖鄶?shù)調(diào)試工具對(duì)多任務(wù)問(wèn)題幾乎沒(méi)有支持。在嵌入式開(kāi)發(fā)中,大多數(shù)工具仍然專(zhuān)注于靜態(tài)暫停系統(tǒng),而不是動(dòng)態(tài)軟件行為。相比之下,許多系統(tǒng)都有實(shí)時(shí)要求,無(wú)法停止調(diào)試。
除了尋找癥狀之外,你當(dāng)然應(yīng)該使用你擁有的任何工具及其提供的工具來(lái)檢查RTOS和應(yīng)用程序是否存在錯(cuò)誤和不當(dāng)行為。例如,IDE可能支持在調(diào)試期間(有時(shí)通過(guò)插件)輕松檢查RTOS對(duì)象,甚至可以分析任務(wù)的堆棧使用情況。RTOS可以讓你在較高的水平上測(cè)量CPU使用率,從而確定每個(gè)任務(wù)平均需要多少CPU時(shí)間。一些調(diào)試器可以在系統(tǒng)執(zhí)行時(shí)實(shí)時(shí)顯示變量(“實(shí)時(shí)觀察”),盡管這可能不適合快速變化的變量。
在嵌入式開(kāi)發(fā)中,如果你想了解應(yīng)用程序和RTOS內(nèi)部實(shí)際發(fā)生的事情的可靠時(shí)間線,你需要一個(gè)能夠感知RTOS的跟蹤,在事情發(fā)生時(shí)記錄下來(lái),還需要一個(gè)工具來(lái)幫助你理解跟蹤信息。
站長(zhǎng)幫手網(wǎng)(www.linkhelper.cn)
文章格式化編輯
繁簡(jiǎn)體相互轉(zhuǎn)換
文字挑錯(cuò)功能(1000個(gè)錯(cuò)別字詞庫(kù))
可定制段前是否空格
只需鼠標(biāo)點(diǎn)擊
全傻瓜式操作