<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 十分鐘了解RTOS!

十分鐘了解RTOS!

作者: 時(shí)間:2022-10-17 來(lái)源:網(wǎng)絡(luò ) 收藏

  實(shí)時(shí)操作()是管理微處理器或微控制器時(shí)間的軟件。實(shí)時(shí)指如果的邏輯和時(shí)序正確性無(wú)法滿(mǎn)足,可能會(huì )導致嚴重后果的系統。實(shí)時(shí)多任務(wù)應用是一個(gè)必須同時(shí)處理多個(gè)時(shí)間關(guān)鍵活動(dòng)的系統。實(shí)時(shí)多任務(wù)內核(也稱(chēng)為實(shí)時(shí)操作系統)是確保盡可能高效地處理時(shí)間關(guān)鍵事件的軟件。的使用,通過(guò)將應用程序劃分為多個(gè)獨立的任務(wù),簡(jiǎn)化了系統設計過(guò)程。

本文引用地址:http://dyxdggzs.com/article/202210/439158.htm

1.前/后臺系統

  不使用的系統通常設計如圖1所示,這類(lèi)系統稱(chēng)為前/后臺系統。應用程序由一個(gè)無(wú)限循環(huán)組成,該循環(huán)調用不同的應用模塊來(lái)執行所需的操作。模塊按順序執行(后臺),由中斷服務(wù)程序(ISR)處理異步事件(前臺)。關(guān)鍵操作必須由ISR執行,以確保及時(shí)處理。由ISR提供的數據信息在相應的后臺模塊執行之前不會(huì )被處理,其延遲時(shí)間取決于后臺循環(huán)執行所需的時(shí)間。

2.實(shí)時(shí)內核

  1、多任務(wù)處理

  多任務(wù)處理是在多個(gè)任務(wù)之間調度和切換CPU的過(guò)程,單個(gè)CPU在多個(gè)順序任務(wù)之間切換使用。多任務(wù)處理提供了將應用程序分解為一組共享處理器的小型專(zhuān)用任務(wù)的能力。實(shí)時(shí)內核使應用程序更易于設計和維護。任務(wù)是一個(gè)簡(jiǎn)單的程序,認為自己擁有整個(gè)CPU。實(shí)時(shí)應用程序的設計過(guò)程涉及將要完成的工作拆分為負責部分問(wèn)題的任務(wù)。

  2、內核

  內核負責任務(wù)管理和任務(wù)之間的通信。當內核決定運行另一個(gè)任務(wù)時(shí),它將當前任務(wù)的上下文(CPU寄存器)保存到當前任務(wù)的獨立堆棧區域。新任務(wù)的上下文將從其堆棧區域恢復,恢復新任務(wù)的代碼執行。這個(gè)過(guò)程稱(chēng)為上下文切換或任務(wù)切換。每個(gè)任務(wù)的堆頂地址等信息被存儲在任務(wù)控制塊(TCB)數據結構中。TCB在創(chuàng )建任務(wù)時(shí)分配,并由RTOS管理。

  3、中斷

  實(shí)時(shí)系統中的一個(gè)重要問(wèn)題是從中斷響應到實(shí)際開(kāi)始執行用戶(hù)中斷處理代碼需要時(shí)間。在處理臨界代碼時(shí),RTOS都會(huì )禁用中斷。禁用中斷的時(shí)間越長(cháng),中斷延遲就越大。RTOS通常在短于50 uS的時(shí)間內禁用中斷,越短越好。

  4、調度

  調度是內核的主要職責,負責確認運行哪個(gè)任務(wù)以及何時(shí)運行。大多數實(shí)時(shí)內核采用優(yōu)先級策略,每個(gè)任務(wù)根據其重要性分配一個(gè)優(yōu)先級。任務(wù)的優(yōu)先級由應用指定。在基于優(yōu)先級調度的內核中,CPU的控制權將始終交給就緒的最高優(yōu)先級任務(wù)。然而,最高優(yōu)先級任務(wù)何時(shí)獲得CPU取決于所使用的調度類(lèi)型。有兩種類(lèi)型調度:非搶占式調度和搶占式調度。

  非搶占式調度

  非搶占式調度要求每個(gè)任務(wù)主動(dòng)放棄對CPU的控制。為了保持任務(wù)并發(fā),這個(gè)過(guò)程必須經(jīng)常進(jìn)行。非搶占式調度也稱(chēng)為協(xié)作式多任務(wù)處理。當一個(gè)任務(wù)放棄CPU時(shí),內核會(huì )執行下一個(gè)就緒的最重要的任務(wù)代碼。異步事件由ISR處理。ISR可以使更高優(yōu)先級任務(wù)就緒,但ISR完成后將返回到被中斷的任務(wù)。只有當前任務(wù)自愿放棄CPU時(shí),新的更高優(yōu)先級任務(wù)才會(huì )獲得CPU的控制權。如圖2所示。非搶占式調度的延遲遠低于前后臺系統;延遲由最長(cháng)任務(wù)的時(shí)間確定。

  搶占式調度

  在搶占式內核中,當一個(gè)事件使高優(yōu)先級的任務(wù)就緒時(shí),當前任務(wù)立即掛起,較高優(yōu)先級的任務(wù)獲得CPU控制權。如果ISR使更高優(yōu)先級的任務(wù)就緒,則被中斷的任務(wù)掛起,恢復執行新的更高優(yōu)先級的任務(wù)。大多數實(shí)時(shí)系統采用搶占式調度,其響應速度更快。搶占式調度如圖3所示。

  5、重入

  可重入函數是可以由多個(gè)任務(wù)使用而不必擔心數據損壞的函數。相反,不可重入函數不能被多個(gè)任務(wù)共享,但可以通過(guò)使用信號量或在臨界段中代碼中禁用中斷來(lái)互斥使用不可重入函數??芍厝牒瘮悼梢员浑S時(shí)中斷并恢復,不會(huì )丟失數據??芍厝牒瘮凳褂镁植孔兞浚–PU寄存器或堆棧變量),如果使用全局變量需保護其數據。專(zhuān)門(mén)為軟件設計的編譯器通常會(huì )提供可重入的運行時(shí)庫。非搶占式調度不需要可重入函數,除非函數在任務(wù)和ISR之間共享。如果函數由多個(gè)任務(wù)共享,則搶占式調度需要函數可重入。

  6、內核服務(wù)

  實(shí)時(shí)內核為應用程序提供各種服務(wù)。內核提供的最常見(jiàn)的服務(wù)之一是信號量管理。信號量是一種協(xié)議機制,用于控制對共享資源的訪(fǎng)問(wèn)(互斥)、發(fā)布事件的發(fā)生或允許兩個(gè)任務(wù)同步它們的活動(dòng)。信號量通常是代碼能否繼續執行的開(kāi)關(guān)。如果信號量已在使用中,則請求任務(wù)將被掛起,直到信號量被其當前所有者釋放。掛起的任務(wù)通常不消耗CPU時(shí)間。

  內核還提供與時(shí)間相關(guān)的服務(wù),允許任務(wù)自身延遲整數個(gè)系統時(shí)鐘。時(shí)鐘節拍通常每10到200毫秒發(fā)生一次,具體取決于應用要求。

  任務(wù)或ISR將信息傳遞給另一個(gè)任務(wù),這稱(chēng)為任務(wù)間通信,用于發(fā)送和接收消息的服務(wù)通常由內核提供。用于發(fā)送消息的兩個(gè)最常見(jiàn)的內核服務(wù)是消息郵箱和消息隊列。消息郵箱也稱(chēng)為消息交換,通常是一個(gè)指針變量。通過(guò)內核提供的服務(wù),任務(wù)或ISR將消息(指針)發(fā)送到郵箱。發(fā)送任務(wù)和接收任務(wù)約定指針指向的消息內容。消息隊列用于向一個(gè)任務(wù)發(fā)送多個(gè)消息。消息隊列本質(zhì)上是一個(gè)郵箱數組。

3.商業(yè)RTOS

  目前大約有100家RTOS供應商。產(chǎn)品可用于8、16和32位微處理器。其中一些是完整的操作系統,包括實(shí)時(shí)內核、輸入/輸出管理器、窗口系統、文件系統、網(wǎng)絡(luò )協(xié)議棧、語(yǔ)言接口庫、調試器和跨平臺編譯器等。RTOS的成本從100美元到超過(guò)10,000美元不等。如此多的供應商,困難在于選擇合適的RTOS。

4.小型系統

  許多小型系統,如引擎控制、智能儀器、機器人、計算機外圍設備和電信設備都可以從使用RTOS中受益。此類(lèi)系統通?;?位微處理器設計。對于64 KB地址空間,大多數8位微處理器無(wú)法承受需要大量存儲器的RTOS。商業(yè)內核只需要大約1到3 KB的ROM。一些內核甚至允許用戶(hù)在逐個(gè)任務(wù)的基礎上指定堆棧大小。此功能有助于減少應用所需的RAM的空間。對RTOS的一個(gè)常見(jiàn)誤解是它大量增加了CPU開(kāi)銷(xiāo)。事實(shí)上,一個(gè)RTOS只需要1%到4%的CPU時(shí)間來(lái)?yè)Q取有價(jià)值的服務(wù)。小型RTOS的特性包括:

  ·低成本

  ·具有最小的中斷延遲

  ·內核服務(wù)的執行時(shí)間確定

  ·能夠管理至少20個(gè)任務(wù)

  ·允許動(dòng)態(tài)創(chuàng )建和刪除任務(wù)

  ·提供信號量管理服務(wù)

  ·基于內核服務(wù)提供時(shí)間延遲和超時(shí)

5.總結

  RTOS允許輕松設計和擴展實(shí)時(shí)應用程序,無(wú)需對軟件進(jìn)行重大更改即可添加新的功能。大量應用程序可以從使用RTOS中受益。RTOS可以確保時(shí)間關(guān)鍵事件被快速有效地處理。一旦你將RTOS用于應用程序,你將離不開(kāi)它!



關(guān)鍵詞: 嵌入式 RTOS 系統

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>