千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > 嵌入式開(kāi)發(fā):RTOS的趨勢(shì)和挑戰(zhàn)

嵌入式開(kāi)發(fā):RTOS的趨勢(shì)和挑戰(zhàn)

來(lái)源:千鋒教育
發(fā)布人:xqq
時(shí)間: 2023-12-12 03:32:35 1702323155

幾十年前,嵌入式行業(yè)將重心從匯編轉(zhuǎn)移到了C編程。更快的處理器和更好的編譯器允許提高抽象層次,以提高嵌入式開(kāi)發(fā)效率和質(zhì)量。

我們現(xiàn)在正處于固件開(kāi)發(fā)技術(shù)的新的重大轉(zhuǎn)變之中。實(shí)時(shí)操作系統(tǒng)(RTOSes)的廣泛使用代表了第三代嵌入式軟件開(kāi)發(fā)。RTOSes引入了一個(gè)新的抽象層次,支持更復(fù)雜的應(yīng)用程序,但也不是沒(méi)有復(fù)雜性。

RTOS是一種用于嵌入式和物聯(lián)網(wǎng)應(yīng)用的快速、確定性操作系統(tǒng)。這些操作系統(tǒng)通常非常小,因此適合在微控制器(MCU)中使用。RTOS的主要工作是提供多線程,從而允許將軟件功能分成多個(gè)“并行”程序,這些程序被稱為“任務(wù)”RTOS通過(guò)快速切換正在執(zhí)行的任務(wù)來(lái)制造并行執(zhí)行的假象。與通用操作系統(tǒng)不同,RTOS讓開(kāi)發(fā)人員能夠完全控制多線程,因此支持確定性的實(shí)時(shí)行為。

使用RTOS有很多好處,但它本身并不是一個(gè)解決方案,而且會(huì)帶來(lái)新的挑戰(zhàn)。許多開(kāi)發(fā)商已經(jīng)一頭扎進(jìn)了RTOS的設(shè)計(jì)中,但往往沒(méi)有完全意識(shí)到其中的含義;他們使用的開(kāi)發(fā)工具對(duì)基于RTOS的開(kāi)發(fā)沒(méi)有適當(dāng)?shù)闹С?;由于這個(gè)原因,在嵌入式開(kāi)發(fā)中,他們可能在調(diào)試和驗(yàn)證方面遇到了很大的困難。

RTOS趨勢(shì)
RTOS自20世紀(jì)80年代初就已經(jīng)存在,但是由于多種原因,它們變得越來(lái)越普遍。嵌入式應(yīng)用變得越來(lái)越復(fù)雜、互聯(lián)和事件驅(qū)動(dòng),使用高級(jí)外設(shè)和中間件堆棧,所有這些都需要并行管理。使用RTOS大大簡(jiǎn)化了這一過(guò)程。使用RTOS的替代方法是使用自定義狀態(tài)和邏輯自己實(shí)現(xiàn)某種執(zhí)行控制。對(duì)于更復(fù)雜的應(yīng)用程序,這往往會(huì)變得復(fù)雜,容易出錯(cuò),并且難以維護(hù)。通過(guò)使用RTOS,你將執(zhí)行控制委托給高度優(yōu)化的RTOS內(nèi)核,該內(nèi)核已經(jīng)過(guò)全面的測(cè)試并在使用中得到驗(yàn)證。

雖然使用RTOS意味著較小的處理開(kāi)銷,但基于RTOS的設(shè)計(jì)通常比傳統(tǒng)的超級(jí)循環(huán)設(shè)計(jì)更有效。這是因?yàn)镽TOS任務(wù)可以在不浪費(fèi)處理器時(shí)間的情況下等待激活事件,并且由于較短的ISR(中斷服務(wù)例程)和搶先調(diào)度,響應(yīng)時(shí)間可以更快。此外,今天的MCU通常具有快速的32位內(nèi)核和大量的閃存和RAM內(nèi)存,使RTOS足跡不再是一個(gè)問(wèn)題。

在嵌入式開(kāi)發(fā)中,免費(fèi)提供的開(kāi)源實(shí)時(shí)操作系統(tǒng)越來(lái)越受歡迎,這使得基于RTOS的設(shè)計(jì)更容易獲得,并創(chuàng)建了大型用戶社區(qū)——一種作為正反饋循環(huán)的“臨界質(zhì)量”。RTOS不再像10-15年前那樣被大肆宣傳,而是被廣泛用于各種嵌入式應(yīng)用中。倡導(dǎo)基于RTOS的設(shè)計(jì)的不僅僅是RTOS的商業(yè)供應(yīng)商;現(xiàn)在,許多MCU廠商的軟件開(kāi)發(fā)套件中都包含了RTOS。

盡管RTOS并不是解決所有問(wèn)題的“靈丹妙藥”,而且可能不適合某些系統(tǒng),但實(shí)時(shí)操作系統(tǒng)的日益使用無(wú)疑是當(dāng)今的一個(gè)主要趨勢(shì),而且可能會(huì)繼續(xù)下去。


使用RTOS的挑戰(zhàn)
那么是什么讓RTOS如此特別,可以被稱為固件設(shè)計(jì)中的第三代呢?RTOS是一個(gè)非常特殊的軟件組件,因?yàn)樗刂屏顺绦虻膱?zhí)行,并以任務(wù)的形式帶來(lái)了新的抽象層次。當(dāng)使用RTOS時(shí),程序的控制流從源代碼中不再明顯,因?yàn)镽TOS決定在任何給定時(shí)刻執(zhí)行哪個(gè)任務(wù)。這是一個(gè)根本性的變化,類似于從匯編到C編程的轉(zhuǎn)變,因?yàn)樗试S使用更高的抽象來(lái)提高生產(chǎn)率,但也意味著對(duì)細(xì)節(jié)的控制更少。

這是一把雙刃劍。它可以使設(shè)計(jì)復(fù)雜的應(yīng)用程序變得更加容易,但是這些應(yīng)用程序隨后可能會(huì)變得難以驗(yàn)證和調(diào)試。雖然RTOS可以降低應(yīng)用程序源代碼的復(fù)雜性,但它不會(huì)降低應(yīng)用程序本身固有的復(fù)雜性。當(dāng)作為一個(gè)系統(tǒng)一起執(zhí)行時(shí),一組看似簡(jiǎn)單的RTOS任務(wù)可能導(dǎo)致驚人復(fù)雜的運(yùn)行時(shí)行為。

如前所述,RTOS本身并不是一個(gè)解決方案,對(duì)于不小心的人來(lái)說(shuō)還有很多陷阱。嵌入式開(kāi)發(fā)人員需要確定任務(wù)如何使用RTOS服務(wù)進(jìn)行交互和共享數(shù)據(jù)。此外,開(kāi)發(fā)人員需要決定重要的RTOS參數(shù),如任務(wù)優(yōu)先級(jí)(相對(duì)緊急程度),這些參數(shù)可能遠(yuǎn)非顯而易見(jiàn)。即使你已經(jīng)根據(jù)基于RTOS的設(shè)計(jì)的最佳實(shí)踐編寫了所有代碼,系統(tǒng)的其他部分(內(nèi)部或第三方組件)也可能運(yùn)行在相同的RTOS環(huán)境中,但可能不遵循相同的原則。

使基于RTOS的設(shè)計(jì)變得困難的根本問(wèn)題是RTOS任務(wù)不是孤立的實(shí)體。任務(wù)之間至少有一種依賴關(guān)系——它們共享的處理器時(shí)間。使用固定優(yōu)先級(jí)搶先調(diào)度,較高優(yōu)先級(jí)的任務(wù)可以在幾乎任何時(shí)間點(diǎn)醒來(lái)并接管執(zhí)行,從而延遲較低優(yōu)先級(jí)任務(wù)的執(zhí)行,直到所有較高優(yōu)先級(jí)的任務(wù)都已完成。

其他類型的共享資源(如全局?jǐn)?shù)據(jù)或硬件外設(shè))也會(huì)導(dǎo)致任務(wù)之間的依賴性,因?yàn)楸匾耐娇赡軙?huì)阻止任務(wù)在需要時(shí)執(zhí)行。如果設(shè)計(jì)不正確,這可能會(huì)導(dǎo)致不可預(yù)測(cè)的延遲,與任務(wù)優(yōu)先級(jí)無(wú)關(guān)。

當(dāng)高優(yōu)先級(jí)任務(wù)(任務(wù)H)試圖訪問(wèn)當(dāng)前正被較低優(yōu)先級(jí)任務(wù)(任務(wù)L)使用的共享資源(例如通信接口)時(shí),可能發(fā)生優(yōu)先級(jí)反轉(zhuǎn)。通常,任務(wù)H會(huì)被阻塞一小段時(shí)間,直到任務(wù)L返回共享資源。如果此時(shí)一個(gè)中等優(yōu)先級(jí)的任務(wù)(任務(wù)M)恰好搶占了任務(wù)L,就會(huì)發(fā)生優(yōu)先級(jí)反轉(zhuǎn)。任務(wù)H的阻塞變得更長(zhǎng),這都是因?yàn)橐粋€(gè)不相關(guān)的任務(wù)具有更低的調(diào)度優(yōu)先級(jí)。在NASA探路者的例子中,這導(dǎo)致看門狗定時(shí)器超時(shí)并重置系統(tǒng)。

像日程安排和共享資源這樣的任務(wù)依賴性受時(shí)間的影響;例如執(zhí)行時(shí)間和輸入時(shí)間。這種定時(shí)屬性在源代碼中是不可見(jiàn)的,并且往往會(huì)根據(jù)系統(tǒng)狀態(tài)和情況而變化。在嵌入式開(kāi)發(fā)中,這使得僅僅從源代碼來(lái)預(yù)測(cè)基于RTOS的系統(tǒng)的實(shí)時(shí)行為幾乎是不可能的。取決于許多因素,任務(wù)可能執(zhí)行得比預(yù)期的慢,有隨機(jī)的意外延遲,或者根本不執(zhí)行。即使系統(tǒng)看起來(lái)像在實(shí)驗(yàn)室中預(yù)期的那樣運(yùn)行,也可能有無(wú)數(shù)其他執(zhí)行場(chǎng)景在時(shí)間上有或多或少的顯著差異,其中一些可能會(huì)導(dǎo)致問(wèn)題。在最糟糕的情況下,系統(tǒng)通過(guò)了測(cè)試,但是對(duì)于你的客戶來(lái)說(shuō),系統(tǒng)會(huì)在隨機(jī)的情況下崩潰。這樣的問(wèn)題在系統(tǒng)級(jí)測(cè)試中很容易被忽略。此外,除非你能夠獲得與問(wèn)題相關(guān)的詳細(xì)診斷信息,否則重現(xiàn)它們進(jìn)行分析可能是一場(chǎng)噩夢(mèng)。

調(diào)試基于RTOS的系統(tǒng)
想在開(kāi)發(fā)的時(shí)候在同一個(gè)抽象層次上進(jìn)行調(diào)試是很自然的。當(dāng)嵌入式行業(yè)從匯編轉(zhuǎn)向C編程時(shí),調(diào)試工具很快就提供了源代碼級(jí)別的調(diào)試,從而使C代碼視角成為正常的調(diào)試視角。然而,調(diào)試工具并沒(méi)有響應(yīng)RTOS的趨勢(shì)而發(fā)展到任何顯著的程度。一些調(diào)試器已經(jīng)更新了“RTOS感知”功能,允許你在調(diào)試時(shí)檢查RTOS對(duì)象(如任務(wù)和信號(hào)量)的狀態(tài)。但這些是“第二代”源代碼級(jí)調(diào)試器的增量改進(jìn),嚴(yán)格關(guān)注源代碼和運(yùn)行/暫停/單步調(diào)試。僅使用傳統(tǒng)的源代碼級(jí)調(diào)試器來(lái)調(diào)試基于RTOS的系統(tǒng)相當(dāng)于在用c編程時(shí)使用匯編級(jí)調(diào)試器。

要完全理解基于RTOS的系統(tǒng)的運(yùn)行時(shí)行為,你需要在RTOS級(jí)別觀察實(shí)時(shí)行為的能力;即具有RTOS感知的跟蹤工具。在嵌入式開(kāi)發(fā)中,這是對(duì)傳統(tǒng)調(diào)試工具的補(bǔ)充,提供了RTOS級(jí)別的時(shí)間線,極大地方便了調(diào)試、驗(yàn)證和性能優(yōu)化。傳統(tǒng)調(diào)試器很像顯微鏡,用于檢查任務(wù)中的詳細(xì)執(zhí)行,而跟蹤更像實(shí)時(shí)執(zhí)行的慢動(dòng)作視頻。

有兩種類型的跟蹤,目的略有不同:硬件生成的和軟件生成的。硬件生成的跟蹤在源代碼或匯編級(jí)別提供了詳細(xì)的執(zhí)行跟蹤,但很少或沒(méi)有RTOS意識(shí)。為了記錄高速數(shù)據(jù)流,在處理器和板上都需要先進(jìn)的跟蹤硬件和合適的跟蹤支持。這種跟蹤往往會(huì)在較低的抽象級(jí)別產(chǎn)生大量數(shù)據(jù),這可能難以理解,并且僅限于處理器中實(shí)現(xiàn)的跟蹤功能。硬件生成的跟蹤主要用于覆蓋率分析和特別棘手問(wèn)題的調(diào)試,在這種情況下需要指令級(jí)跟蹤。

軟件生成的跟蹤意味著將跟蹤代碼片段添加到目標(biāo)軟件中,目的是記錄RTOS中的重要事件,也可以選擇記錄應(yīng)用程序代碼中的重要事件。你通常不需要自己插入RTOS跟蹤代碼,因?yàn)檫@通常是由RTOS或工具供應(yīng)商提供的。使用軟件跟蹤,任何軟件事件都可以被記錄,包括任何相關(guān)數(shù)據(jù),基本上可以在任何處理器上記錄。缺點(diǎn)是跟蹤代碼的開(kāi)銷,但現(xiàn)代32位MCU上的RTOS級(jí)跟蹤只需要處理器時(shí)間的百分之幾,因?yàn)樾枰涗浀臄?shù)據(jù)相對(duì)較少,并且跟蹤的事件不是很頻繁。這使得使用通用調(diào)試接口或其他接口(如USB或TCP/IP)連續(xù)傳輸數(shù)據(jù)成為可能。低數(shù)據(jù)速率也允許跟蹤RAM緩沖器。僅僅幾千字節(jié)就足以獲得最近事件的像樣的跟蹤。這樣,追蹤也可以在實(shí)驗(yàn)室之外使用;例如在現(xiàn)場(chǎng)測(cè)試或部署操作期間。

可視化對(duì)于理解痕跡至關(guān)重要。在嵌入式開(kāi)發(fā)中,許多嵌入式系統(tǒng)都有或多或少的循環(huán)行為,因此大多數(shù)跟蹤數(shù)據(jù)都是“正?!毙袨榈臒o(wú)關(guān)重復(fù)。有趣的部分通常是異常,但是如果你不知道具體要找什么,它們可能很難找到。然而,假設(shè)數(shù)據(jù)被正確可視化,人腦在識(shí)別視覺(jué)模式和異常方面是非凡的。

雖然一些工具可以將RTOS軌跡顯示為經(jīng)典的甘特圖,但是這種可視化不適合在同一視圖中顯示其他事件;例如API調(diào)用或用戶登錄。但是,垂直執(zhí)行跟蹤可以使用指向圖形執(zhí)行跟蹤的文本標(biāo)簽來(lái)顯示此類事件。此外,僅僅顯示執(zhí)行跟蹤是非常有限的,因?yàn)榭梢詮腞TOS跟蹤中獲得更多的信息。例如,任務(wù)和ISR的交互可以表示為依賴圖,還可以顯示關(guān)注其他相關(guān)RTOS對(duì)象(如信號(hào)量、隊(duì)列和互斥體)的跟蹤視圖。

結(jié)論
RTOS趨勢(shì)在嵌入式行業(yè)非常明顯,這是有充分理由的。由于日益復(fù)雜和互聯(lián)的應(yīng)用程序,越來(lái)越多的開(kāi)發(fā)人員依賴RTOS。此外,隨著開(kāi)發(fā)商被領(lǐng)先的解決方案所吸引,RTOS市場(chǎng)正在整合。

RTOS可以被視為第三代固件開(kāi)發(fā),因?yàn)槎嗑€程帶來(lái)了更高層次的抽象和對(duì)執(zhí)行的更少細(xì)節(jié)控制。這有很大的缺陷,需要在RTOS級(jí)別提供更好的調(diào)試支持。然而,通用的調(diào)試工具并沒(méi)有響應(yīng)RTOS的趨勢(shì)而得到顯著的發(fā)展;相反,它們通常只提供對(duì)傳統(tǒng)調(diào)試器概念的增量改進(jìn)。

通過(guò)更好地了解基于RTOS的系統(tǒng)的實(shí)時(shí)執(zhí)行,可以簡(jiǎn)化這些系統(tǒng)的調(diào)試。這需要RTOS級(jí)別的跟蹤,其中可視化對(duì)于理解數(shù)據(jù)至關(guān)重要。在嵌入式開(kāi)發(fā)中,一些工具可以將RTOS軌跡顯示為水平甘特圖,但這并不理想。更復(fù)雜的可視化是可能的和可用的,針對(duì)RTOS跟蹤進(jìn)行了優(yōu)化,這使得理解運(yùn)行時(shí)系統(tǒng)、發(fā)現(xiàn)重要問(wèn)題和驗(yàn)證解決方案變得更加容易。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
嵌入式培訓(xùn)課程:探索技術(shù)的無(wú)限可能

近年來(lái),嵌入式系統(tǒng)的廣泛應(yīng)用已經(jīng)深刻改變了我們的生活方式。從智能手機(jī)到智能家居,從汽車到醫(yī)療設(shè)備,嵌入式技術(shù)已經(jīng)成為現(xiàn)代社會(huì)不可或缺的...詳情>>

2023-12-12 11:02:35
嵌入式開(kāi)發(fā):Linux網(wǎng)絡(luò)編程的探索與實(shí)踐

在當(dāng)今的科技世界中,嵌入式系統(tǒng)已經(jīng)滲透到我們生活的方方面面,從智能手機(jī)、電視、汽車到醫(yī)療設(shè)備等。而在這些設(shè)備中,Linux網(wǎng)絡(luò)編程扮演著至...詳情>>

2023-12-12 09:55:55
Java游戲項(xiàng)目開(kāi)發(fā):技術(shù)概覽與實(shí)踐

在數(shù)字化世界中,游戲已經(jīng)成為了人們休閑娛樂(lè)的重要方式之一。隨著科技的不斷進(jìn)步,游戲開(kāi)發(fā)行業(yè)也在不斷發(fā)展,而Java作為一門廣泛使用的編程語(yǔ)...詳情>>

2023-12-12 08:49:15
Web前端的基石:HTML

在數(shù)字化的時(shí)代,網(wǎng)頁(yè)設(shè)計(jì)已經(jīng)成為了一個(gè)重要的領(lǐng)域。而在這個(gè)領(lǐng)域中,HTML(HyperTextMarkupLanguage)無(wú)疑是最基礎(chǔ)、最重要的一環(huán)。它是構(gòu)建...詳情>>

2023-12-12 08:15:55
嵌入式開(kāi)發(fā):內(nèi)存分配的方式

嵌入式系統(tǒng)開(kāi)發(fā)中,內(nèi)存分配是一個(gè)至關(guān)重要的話題。嵌入式系統(tǒng)通常具有有限的內(nèi)存資源,因此合理的內(nèi)存分配方式對(duì)系統(tǒng)的性能和穩(wěn)定性至關(guān)重要。...詳情>>

2023-12-12 06:35:55
快速通道