色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

          EEPW首頁 > 博客 > 新手必看的RTOS基礎(chǔ)知識

          新手必看的RTOS基礎(chǔ)知識

          發(fā)布人:xiaomaidashu 時間:2023-12-01 來源:工程師 發(fā)布文章
          RTOS基礎(chǔ)知識

          RTOS

          實時操作系統(tǒng)(RTOS)是一種操作系統(tǒng)(OS),旨在提供實時應(yīng)用進程數(shù)據(jù),通常沒有緩沖延遲。

          RTOS中的關(guān)鍵因素是最小的中斷延遲和最小的線程切換延遲。RTOS的價值在于它的響應(yīng)速度或可預(yù)測性,而不是它在給定時間段內(nèi)可以執(zhí)行的工作量。

          對于嵌入式設(shè)備,一般規(guī)則是當應(yīng)用進程需要執(zhí)行多個簡單操作時使用RTOS。

          實時操作系統(tǒng)具有以下目標:

          • 低延遲。
          • 決定論:需要知道處理事情需要多長時間才能確保滿足最后期限。
          • 結(jié)構(gòu)化軟件:使用RTOS,可以以結(jié)構(gòu)化的方式分而治之。直接向應(yīng)用進程添加其他組件。
          • 可擴展性:RTOS必須能夠從簡單的應(yīng)用進程擴展到具有堆棧、驅(qū)動進程、文檔系統(tǒng)等的復(fù)雜應(yīng)用進程。
          • 卸載開發(fā):RTOS管理系統(tǒng)的許多方面,例如,RTOS與調(diào)度一起,通常處理電源管理,中斷表管理,內(nèi)存管理,異常處理等。
          線程

          基于RTOS的應(yīng)用進程中的典型線程:

          • 中斷服務(wù)例程(ISR):由硬件中斷啟動的線程。ISR運行直至完成。ISR都共享同一堆棧。
          • 任務(wù):在等待事件發(fā)生時可以阻塞的線程。傳統(tǒng)上,任務(wù)是長壽命線程(與運行直至完成的ISR相反)。每個任務(wù)都有自己的堆棧,可以讓它長壽。
          • Idle:優(yōu)先級最低的線程,僅在沒有其他線程準備好執(zhí)行時運行。通常,空閑只是具有盡可能低優(yōu)先級的特殊任務(wù)。
          調(diào)度進程

          每個RTOS的核心都有一個調(diào)度進程。調(diào)度進程負責管理系統(tǒng)中線程的執(zhí)行。調(diào)度進程有兩種主要管理方式:搶占式調(diào)度和時間片調(diào)度。

          搶占式調(diào)度是最常見的RTOS調(diào)度進程類型。TI-RTOS和FreeRTOS都有搶占式調(diào)度進程。使用搶占式調(diào)度進程,正在運行的線程將一直持續(xù)到

          • 完成(例如,ISR完成)。
          • 較高優(yōu)先級的線程準備就緒(在這種情況下,優(yōu)先級較高的線程會搶占優(yōu)先級較低的線程)。
          • 線程在等待資源時放棄處理器(例如,任務(wù)調(diào)用sleep())。

          時間片調(diào)度保證每個線程都有一個要執(zhí)行的槽。這種類型的調(diào)度通常不利于實時應(yīng)用。如果需要,TI-RTOS內(nèi)核支持使用任務(wù)進行時間切片調(diào)度。

          其他關(guān)鍵術(shù)語

          線程安全:如果一段代碼以保證多個線程同時正確訪問(讀取、寫入)的方式操作共享數(shù)據(jù)結(jié)構(gòu),則該代碼段是線程安全的。

          Blocked:如果任務(wù)正在等待資源且未消耗任何CPU,則阻止該任務(wù)。例如,如果任務(wù)調(diào)用Task_sleep()或Semaphore_pend()(非零超時且信號量不可用),則該任務(wù)將被阻止,并允許另一個線程運行。

          裸機:不適用RTOS的應(yīng)用進程的公用名。

          裸機與實時操作系統(tǒng)

          典型的裸機應(yīng)用進程通??煞譃槿齻€關(guān)鍵部分:

          • 初始化:初始化main()中的硬件和軟件組件。
          • 超級循環(huán)狀態(tài)機:用于管理應(yīng)用進程的代碼。這些操作基于中斷(例如,收到SPI數(shù)據(jù)包或計時器過期)或輪詢的結(jié)果。
          • ISR:由外圍設(shè)備(例如UART)、定時器或其他特定于設(shè)備的項目(例如異?;蚨嗪送ㄐ牛┑闹袛鄨?zhí)行的代碼。

          圖片

          裸機應(yīng)用進程有其一席之地。它們通常很小,速度快,并且通過簡單的應(yīng)用進程相對容易理解。一旦需要更復(fù)雜的邏輯,RTOS就開始大放異彩。

          圖片

          實時操作系統(tǒng)組件

          • 計劃進程:保證最高優(yōu)先級線程正在運行的搶占式計劃進程。
          • 通信機制:信號量、消息隊列、隊列等。
          • 關(guān)鍵區(qū)域機制:互斥體、門、鎖等。
          • 計時服務(wù):時鐘、定時器等。
          • 電源管理:對于低功耗設(shè)備,電源管理通常是RTOS的一部分,因為它知道設(shè)備的狀態(tài)。
          • 內(nèi)存管理:可變大小的堆、固定大小的堆等。
          • 外設(shè)驅(qū)動器:UART、SPI、I2C等。
          • 協(xié)議棧:藍牙、無線網(wǎng)絡(luò)等。
          • 文檔系統(tǒng):FatFs等。
          • 設(shè)備管理:異常處理、啟動等。
          POSIX

          POSIX(Portable Operating System Interface):可移植操作系統(tǒng)接口

          SimpleLink SDK在TI-RTOS和FreeRTOS之上提供POSIX支持。這允許應(yīng)用進程獨立于底層RTOS。

          POSIX API是底層實時操作系統(tǒng)之上的一個小填充碼。創(chuàng)建POSIX線程時,將創(chuàng)建基礎(chǔ)TI-RTOS(或FreeRTOS)任務(wù)。同樣,在創(chuàng)建POSIX線程信號量時,將創(chuàng)建TI-RTOS(或FreeRTOS)信號量。

          POSIX支持的一個很好的功能是能夠從網(wǎng)絡(luò)上獲取基于POSIX的代碼并快速使其正常工作。

          POSIX不是實時操作系統(tǒng)。它是一個操作系統(tǒng)兼容性層,允許應(yīng)用進程在操作系統(tǒng)之間輕松移植。

          RTOS線程通信

          所有RTOS都提供標準的通信機制,如信號量、互斥鎖、消息隊列、鏈表等。

          信號量

          信號量允許資源管理。任務(wù)可以在sem_wait()上阻塞,直到資源變得可用(通過sem_post())。一個常見的用例是Hwi接收數(shù)據(jù)并發(fā)布信號量,以便任務(wù)可以處理它。這是可取的,因為它可以最大限度地減少中斷的持續(xù)時間。大多數(shù)RTOS都支持二進制和計數(shù)信號量。

          圖片

          消息隊列

          消息隊列對于在線程之間發(fā)送數(shù)據(jù)非常有用。消息隊列可以配置為發(fā)送/接收任何大小的用戶定義的消息。在這里,一個任務(wù)正在向另一個任務(wù)發(fā)送消息:

          圖片

          當希望將特定功能集中到單個任務(wù)中時,消息隊列非常有用。所有其他線程都可以將消息發(fā)送到集中式任務(wù)進行處理。消息隊列以線程安全的方式處理消息。

          POSIX支持層中的消息隊列是創(chuàng)建在TI-RTOS中的Mailboxes和FreeRTOS中的隊列之上的。

          執(zhí)行

          一個搶占式的調(diào)度進程在運行。假設(shè)以下線程是在main()中創(chuàng)建的:

          ISRX:中斷服務(wù)例程

          MidA:在main()中創(chuàng)建第一個優(yōu)先級為4

          MidB:在main()中創(chuàng)建第二個優(yōu)先級為4

          High:在main()中創(chuàng)建最后一個優(yōu)先級為8

          圖片

          一旦內(nèi)核的調(diào)度進程啟動(在本例中為main()中的BIOS_start()),所有任務(wù)都已準備好運行,首先運行的是High,因為它具有最高優(yōu)先級。

          1.ISRX斷言,因為它會搶占所有任務(wù)。High現(xiàn)在處于搶占狀態(tài)。

          2.ISRX完成后,High將再次開始運行,直到它在Task_sleep()(或某些阻塞API)上阻塞?,F(xiàn)在,MidA可以運行了。

          3.MidA一直運行,直到它遇到阻塞調(diào)用(比如Semaphore_pend())。現(xiàn)在,MidB可以運行了。

          4.MidB一直運行到High取消阻塞(假設(shè)Task_sleep()已過期)。MidB現(xiàn)在被搶占了。

          5.High將一直運行,直到ISRX被斷言并搶占High。注意:現(xiàn)在有兩個任務(wù)被搶占。

          6.MidA準備就緒(假設(shè)ISRX發(fā)布了它被阻止的信號量)。MidA不會運行,因為有更高優(yōu)先級的線程正在運行。

          7.ISRX完成,因此High再次運行,然后再次阻塞,因此MidB再次運行,直到它阻塞?,F(xiàn)在MidA可以運行,因為沒有更高優(yōu)先級的任務(wù)正在運行。注意:MidA必須等到MidB完成后,因為當MidA準備就緒時,MidB正在運行。

          8.MidA阻塞,現(xiàn)在沒有線程正在運行或準備運行,因此Idle運行。

          9.MidB取消阻塞并運行。


          *博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。



          關(guān)鍵詞: RTOS

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉