<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è) > 嵌入式系統 > 設計應用 > 細說(shuō)μC/OS-II

細說(shuō)μC/OS-II

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

μC/OS-II嵌入式實(shí)時(shí)操作系統自1998年推出以來(lái),因其方便移植、代碼量小、實(shí)時(shí)性強、可靠性高、內核可剪裁等優(yōu)點(diǎn),成為我國計算機嵌入式應用領(lǐng)域最受喜愛(ài)的實(shí)時(shí)操作系統(Real-Time Opreating System)之一。由于其源碼開(kāi)源,至今,已經(jīng)成功在諸多廠(chǎng)家的MCU上移植并應用在各行各業(yè)的電子產(chǎn)品之中,因而備受矚目。此文幫助有意向學(xué)習μC/OS-II的初學(xué)者全面的、系統的了解實(shí)時(shí)系統的核心思想,也為正在學(xué)習μC/OS-II的童鞋們理清思路,更上層樓。

本文引用地址:http://dyxdggzs.com/article/201808/385043.htm

什么是μC/OS-II?

μC/OS-II是一種基于優(yōu)先級可剝奪型的多任務(wù)實(shí)時(shí)內核,包含了任務(wù)調度與管理、時(shí)間管理、任務(wù)間通信與同步等基本功能。

如何實(shí)現多任務(wù)?

在μC/OS-II系統中,大多數情況下,1個(gè)任務(wù)就是一個(gè)死循環(huán),特殊情況是,有的任務(wù)執行1次后直接銷(xiāo)毀自己。既然是死循環(huán)如何實(shí)現多任務(wù)呢?這就涉及到一個(gè)完整的任務(wù)調度機制,簡(jiǎn)單來(lái)說(shuō),就是給每個(gè)任務(wù)設置合適的優(yōu)先級,CPU只有一個(gè),優(yōu)先級高的任務(wù)可以搶占優(yōu)先級低的任務(wù),而獨占CPU。在μC/OS-II中,系統可以管理64個(gè)任務(wù),有8個(gè)任務(wù)預留給系統,用戶(hù)最多可以創(chuàng )建56個(gè)任務(wù),而實(shí)質(zhì)上用戶(hù)不應該創(chuàng )建過(guò)多的任務(wù),因為這樣的話(huà),優(yōu)先級最低的任務(wù)可能無(wú)法得到執行。

何時(shí)執行任務(wù)調度

簡(jiǎn)單來(lái)說(shuō),高優(yōu)先級的就緒任務(wù)發(fā)生時(shí),會(huì )搶占低優(yōu)先級任務(wù)的CPU,這時(shí)系統就會(huì )自動(dòng)執行任務(wù)調度。在任務(wù)銷(xiāo)毀時(shí),掛起時(shí),延時(shí)時(shí),中斷退出時(shí)都會(huì )啟動(dòng)任務(wù)調度。

這里舉個(gè)例子,假如下面這段程序具有2個(gè)用戶(hù)任務(wù)LED1_TASK,和KEY_TASK。KEY_TASK的任務(wù)優(yōu)先級較高,這段程序無(wú)法實(shí)現預期的功能,會(huì )出現什么問(wèn)題呢?

LED閃燈任務(wù)無(wú)法得到執行,因為程序一直的執行按鍵掃描,其優(yōu)先級較高(這里假定沒(méi)有中斷發(fā)生)一直在獨占CPU,而沒(méi)有釋放,也就是無(wú)法執行任務(wù)調度,在LED任務(wù)中,調用OSTimeDly()函數的同時(shí),LED任務(wù)即被掛起,交出CPU的控制權,同時(shí)執行任務(wù)調度,系統會(huì )選擇一個(gè)處于就緒狀態(tài)的優(yōu)先級最高的任務(wù)來(lái)執行。

舉上面這個(gè)例子是為了說(shuō)明任務(wù)調度是在一定情況下發(fā)生的,因為是搶占式的,為了讓低優(yōu)先級的任務(wù)得到執行,高優(yōu)先級任務(wù)必須在適當的情況下交出CPU,如果在KEY_TASK任務(wù)中,在獲取按鍵信息后面調用OSTimeDly()函數,即可使LED閃燈任務(wù)得到執行。

關(guān)于中斷

中斷在實(shí)時(shí)操作系統中具有舉足輕重的作用,所以中斷程序的設計無(wú)疑是編程的要點(diǎn)及難點(diǎn),在多任務(wù)實(shí)時(shí)操作系統中,不同的中斷任務(wù)被安排不同的優(yōu)先級,在允許中斷嵌套的情況下,最高優(yōu)先級的中斷總能得到及時(shí)響應。中斷級的任務(wù)可以看成是比最高優(yōu)先級的任務(wù)級任務(wù)的優(yōu)先級還要高。在用戶(hù)中斷服務(wù)程序內部,要盡可能的縮短代碼量,不要做耗時(shí)的操作,正確的做法是調用任務(wù)級任務(wù)進(jìn)行相關(guān)的數據處理。

同樣,問(wèn)題來(lái)了,在中斷服務(wù)程序中觸發(fā)某個(gè)任務(wù)級任務(wù)就緒,是否立即進(jìn)行任務(wù)調度,答案是否定的,因為任務(wù)級任務(wù)的優(yōu)先級不夠,需等待中斷服務(wù)程序退出,那系統如何知道中斷服務(wù)程序是否結束了呢,這就需要的中斷程序內部調用系統服務(wù)函數OSIntExit();以此來(lái)觸發(fā)任務(wù)調度。

硬實(shí)時(shí)與軟實(shí)時(shí)

這里說(shuō)一下硬實(shí)時(shí)與軟實(shí)時(shí)的區別,能夠在指定的期限完成實(shí)時(shí)任務(wù)(即便在最壞的處理負載下也能如此)的操作系統稱(chēng)為硬實(shí)時(shí)系統。但并不是任何情況下都需要硬實(shí)時(shí)支持。如果操作系統在平均情況下能支持任務(wù)的執行期限,則稱(chēng)它為軟實(shí)時(shí)系統。

RTOS的優(yōu)勢是硬實(shí)時(shí)控制,硬實(shí)時(shí)不是指“快”,而是指可精確預測可控制,能保證在規定時(shí)間內完成任務(wù)。因為執行時(shí)間可預測,所以當你想快時(shí),只要選一個(gè)速度合適的CPU即可,這個(gè)需要的速度在μC/OS-II系統中是可以精確算出來(lái)的。軟實(shí)時(shí)系統的時(shí)限是一個(gè)柔性靈活的,它可以容忍偶然的超時(shí)錯誤。失敗造成的后果并不嚴重。

舉個(gè)例子,汽車(chē)發(fā)生危險時(shí),汽車(chē)氣囊彈出必須在一定時(shí)間內完成,晚一秒都會(huì )造成致命傷害(硬實(shí)時(shí))。而在圖像傳輸過(guò)程中,偶爾丟失1幀圖像數據是可以容忍的(軟實(shí)時(shí))。

任務(wù)同步與數據通信

毫無(wú)疑問(wèn),任務(wù)之間都不是相互割裂的,需要進(jìn)行數據或者信息的交互,為此,μC/OS-II系統提供了用于任務(wù)間通信的手段。任務(wù)之間可以通過(guò)信號量,事件標志組,消息郵箱,消息隊列進(jìn)行同步。而數據通信最簡(jiǎn)單的方式是采用全局變量來(lái)共享資源,這里面涉及到保障數據可靠性的問(wèn)題,比如,當一個(gè)任務(wù)正在讀數據的時(shí)候,還沒(méi)有讀完,這時(shí)一個(gè)中斷觸發(fā)高級別的任務(wù)運行,高級別的任務(wù)要更新數據,這就會(huì )導致低級別任務(wù)讀出來(lái)的數據是錯誤的。未解決此問(wèn)題,可以采用關(guān)中斷、關(guān)調度、使用互斥信號量、使用計數信號量來(lái)解決,關(guān)中斷與關(guān)調度比較生硬,也違反了系統的實(shí)時(shí)性設計原則,因此推薦使用互斥信號量來(lái)解決,所謂互斥信號量,相當于一個(gè)鑰匙,鑰匙只有一個(gè),當一個(gè)任務(wù)要訪(fǎng)問(wèn)該資源時(shí),必須先取得該鑰匙。

時(shí)鐘節拍

μC/OS-II需要用戶(hù)提供一個(gè)周期性的中斷來(lái)實(shí)現延時(shí)和超時(shí)等操作,這個(gè)周期性的時(shí)鐘叫“時(shí)鐘節拍”,其頻率范圍通常在10~1000Hz之間。時(shí)鐘節拍的頻率大小取決于對定時(shí)精度的要求,頻率越高,系統的負擔越重。

問(wèn)題:時(shí)鐘節拍是否是μC/OS-II中必不可少的?沒(méi)有時(shí)鐘節拍系統是否能夠工作?

答案是:沒(méi)有時(shí)鐘節拍,系統照樣可以工作,只是無(wú)法進(jìn)行延時(shí)或者超時(shí)判斷,無(wú)法調用延時(shí)函數來(lái)進(jìn)行任務(wù)調度,但是仍然有其它方法可以進(jìn)行任務(wù)切換。



關(guān)鍵詞: μC/OS-II

評論


相關(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>