0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

小麥大叔 ? 來源:小麥大叔 ? 2023-11-20 16:06 ? 次閱讀

RTOS基礎(chǔ)知識

0a045344-8779-11ee-939d-92fbcf53809c.png

RTOS

0a117b8c-8779-11ee-939d-92fbcf53809c.jpg

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

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

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

實(shí)時(shí)操作系統(tǒng)具有以下目標(biāo):

低延遲。

決定論:需要知道處理事情需要多長時(shí)間才能確保滿足最后期限。

結(jié)構(gòu)化軟件:使用RTOS,可以以結(jié)構(gòu)化的方式分而治之。直接向應(yīng)用進(jìn)程添加其他組件。

可擴(kuò)展性:RTOS必須能夠從簡單的應(yīng)用進(jìn)程擴(kuò)展到具有堆棧、驅(qū)動進(jìn)程、文檔系統(tǒng)等的復(fù)雜應(yīng)用進(jìn)程。

卸載開發(fā):RTOS管理系統(tǒng)的許多方面,例如,RTOS與調(diào)度一起,通常處理電源管理,中斷表管理,內(nèi)存管理,異常處理等。

線程

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

中斷服務(wù)例程(ISR):由硬件中斷啟動的線程。ISR運(yùn)行直至完成。ISR都共享同一堆棧。

任務(wù):在等待事件發(fā)生時(shí)可以阻塞的線程。傳統(tǒng)上,任務(wù)是長壽命線程(與運(yùn)行直至完成的ISR相反)。每個(gè)任務(wù)都有自己的堆棧,可以讓它長壽。

Idle:優(yōu)先級最低的線程,僅在沒有其他線程準(zhǔn)備好執(zhí)行時(shí)運(yùn)行。通常,空閑只是具有盡可能低優(yōu)先級的特殊任務(wù)。

調(diào)度進(jìn)程

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

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

完成(例如,ISR完成)。

較高優(yōu)先級的線程準(zhǔn)備就緒(在這種情況下,優(yōu)先級較高的線程會搶占優(yōu)先級較低的線程)。

線程在等待資源時(shí)放棄處理器(例如,任務(wù)調(diào)用sleep())。

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

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

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

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

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

裸機(jī)與實(shí)時(shí)操作系統(tǒng)

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

初始化:初始化main()中的硬件和軟件組件。

超級循環(huán)狀態(tài)機(jī):用于管理應(yīng)用進(jìn)程的代碼。這些操作基于中斷(例如,收到SPI數(shù)據(jù)包或計(jì)時(shí)器過期)或輪詢的結(jié)果。

ISR:由外圍設(shè)備(例如UART)、定時(shí)器或其他特定于設(shè)備的項(xiàng)目(例如異?;蚨嗪?a href="http://www.ttokpm.com/v/tag/1301/" target="_blank">通信)的中斷執(zhí)行的代碼。

0a1cab88-8779-11ee-939d-92fbcf53809c.jpg

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

0a244852-8779-11ee-939d-92fbcf53809c.jpg

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

計(jì)劃進(jìn)程:保證最高優(yōu)先級線程正在運(yùn)行的搶占式計(jì)劃進(jìn)程。

通信機(jī)制:信號量、消息隊(duì)列、隊(duì)列等。

關(guān)鍵區(qū)域機(jī)制:互斥體、門、鎖等。

計(jì)時(shí)服務(wù):時(shí)鐘、定時(shí)器等。

電源管理:對于低功耗設(shè)備,電源管理通常是RTOS的一部分,因?yàn)樗涝O(shè)備的狀態(tài)。

內(nèi)存管理:可變大小的堆、固定大小的堆等。

外設(shè)驅(qū)動器:UART、SPI、I2C等。

協(xié)議棧:藍(lán)牙、無線網(wǎng)絡(luò)等。

文檔系統(tǒng):FatFs等。

設(shè)備管理:異常處理、啟動等。

POSIX

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

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

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

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

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

RTOS線程通信

所有RTOS都提供標(biāo)準(zhǔn)的通信機(jī)制,如信號量、互斥鎖、消息隊(duì)列、鏈表等。

信號量

信號量允許資源管理。任務(wù)可以在sem_wait()上阻塞,直到資源變得可用(通過sem_post())。一個(gè)常見的用例是Hwi接收數(shù)據(jù)并發(fā)布信號量,以便任務(wù)可以處理它。這是可取的,因?yàn)樗梢宰畲笙薅鹊販p少中斷的持續(xù)時(shí)間。大多數(shù)RTOS都支持二進(jìn)制和計(jì)數(shù)信號量。

0a36b17c-8779-11ee-939d-92fbcf53809c.jpg

消息隊(duì)列

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

0a3aec06-8779-11ee-939d-92fbcf53809c.jpg

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

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

執(zhí)行

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

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

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

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

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

0a60edc0-8779-11ee-939d-92fbcf53809c.jpg

一旦內(nèi)核的調(diào)度進(jìn)程啟動(在本例中為main()中的BIOS_start()),所有任務(wù)都已準(zhǔn)備好運(yùn)行,首先運(yùn)行的是High,因?yàn)樗哂凶罡邇?yōu)先級。

1.ISRX斷言,因?yàn)樗鼤屨妓腥蝿?wù)。High現(xiàn)在處于搶占狀態(tài)。

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

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

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

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

6.MidA準(zhǔn)備就緒(假設(shè)ISRX發(fā)布了它被阻止的信號量)。MidA不會運(yùn)行,因?yàn)橛懈邇?yōu)先級的線程正在運(yùn)行。

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

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

9.MidB取消阻塞并運(yùn)行。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6545

    瀏覽量

    122743
  • RTOS
    +關(guān)注

    關(guān)注

    20

    文章

    804

    瀏覽量

    119115
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    501

    瀏覽量

    19580

原文標(biāo)題:新手必看的RTOS基礎(chǔ)知識

文章出處:【微信號:knifewheat,微信公眾號:小麥大叔】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    弱電新手必看

    `弱電新手必看`
    發(fā)表于 09-02 19:52

    PCB基礎(chǔ)知識,新手請進(jìn)

    PCB基礎(chǔ)知識
    發(fā)表于 12-17 14:12

    linux 入門新手必看

    Linux 嵌入式學(xué)習(xí)新手必看,國嵌培訓(xùn)中的原版教程
    發(fā)表于 07-21 08:23

    電子元器件基礎(chǔ)知識培訓(xùn)資料

    電子元器件基礎(chǔ)知識培訓(xùn)資料,led初學(xué)者必看。
    發(fā)表于 05-10 15:59

    電子元器件基礎(chǔ)知識

    很不錯(cuò)的電子元器件基礎(chǔ)知識,適合新手學(xué)習(xí)
    發(fā)表于 10-20 17:44

    電源從業(yè)者必看必會之變壓器基礎(chǔ)知識_制作流程_詳解

    適合電源從業(yè)者的基礎(chǔ)知識入門維修必看
    發(fā)表于 11-10 20:42

    新手入門必看!

    新手入門必看
    發(fā)表于 08-27 09:18

    【HarmonyOS】移植RTOS必備基礎(chǔ)知識

    原文鏈接:https://harmonyos.51cto.com/posts/14861. 基礎(chǔ)知識移植內(nèi)核對技術(shù)的要求比較高、比較細(xì)。1.1 單片機(jī)相關(guān)的知識棧的作用加載地址、鏈接地址重定位幾個(gè)
    發(fā)表于 10-30 11:56

    PLC入門必看基礎(chǔ)知識

    PLC基礎(chǔ)知識(PLC入門必看)與C語言有什么關(guān)系_plc可以用c語言編程嗎_plc的C語言編程詳解
    發(fā)表于 09-09 08:39

    labview基礎(chǔ)知識

    labview軟件的基礎(chǔ)知識匯總,適合新手入門。。
    發(fā)表于 05-17 09:49 ?4次下載

    0.96寸OLED使用文檔新手必看V2.0

    0.96寸OLED使用文檔新手必看V2.0.pdf0.96寸OLED使用文檔新手必看V2.0.pdf
    發(fā)表于 07-11 18:43 ?198次下載

    PSCAD4.5建模與仿真(新手必看

    PSCAD4.5建模與仿真(新手必看
    發(fā)表于 07-10 10:13 ?0次下載

    電源管理基礎(chǔ)知識電源管理基礎(chǔ)知識電源管理基礎(chǔ)知識

    電源管理基礎(chǔ)知識電源管理基礎(chǔ)知識電源管理基礎(chǔ)知識
    發(fā)表于 09-15 14:36 ?76次下載
    電源管理<b class='flag-5'>基礎(chǔ)知識</b>電源管理<b class='flag-5'>基礎(chǔ)知識</b>電源管理<b class='flag-5'>基礎(chǔ)知識</b>

    新手Qt_CreatoR_入門第一必看

    新手Qt_CreatoR_入門第一必看
    發(fā)表于 10-30 08:55 ?17次下載
    <b class='flag-5'>新手</b>Qt_CreatoR_入門第一<b class='flag-5'>必看</b>

    新手必入,最全電路基礎(chǔ)知識都在這了

    責(zé)任編輯:xj 原文標(biāo)題:新手必備!最全電路基礎(chǔ)知識講解 文章出處:【微信公眾號:電源研發(fā)精英圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
    的頭像 發(fā)表于 10-14 11:57 ?1.1w次閱讀
    <b class='flag-5'>新手</b>必入,最全電路<b class='flag-5'>基礎(chǔ)知識</b>都在這了