<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è) > 嵌入式系統 > 設計應用 > 再議基于μC/OS-II的時(shí)間片調度法設計

再議基于μC/OS-II的時(shí)間片調度法設計

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

引言
筆者曾在本刊2008年12期上發(fā)表過(guò)一篇文章——《基于μC/OS-11的時(shí)間片法設計》,近期在網(wǎng)絡(luò )上看到有很多感興趣的技術(shù)同行作了大量引用和轉載。根據在實(shí)際項目中的應用經(jīng)驗,有必要對其再議,主要原因如下:
①多任務(wù)的時(shí)間片在嵌入式領(lǐng)域有實(shí)用價(jià)值。一方面是很多嵌入式軟件系統升級有這種需求,舊的軟件模塊基于Endless Loop實(shí)現,升級到μC/后,若要最大限度地復用舊的軟件模塊,時(shí)間片算法是實(shí)現舊的設計模式到新架構之間最簡(jiǎn)單的橋梁。另一方面,對于控制領(lǐng)域,存在大量的耗時(shí)任務(wù)無(wú)法自動(dòng)釋放控制權,時(shí)間片調度降低了任務(wù)設計的復雜度。剛剛發(fā)布不久的μC/,推出的重大改進(jìn)之一就是增加了對Round Robin的支持,更是表明μC/的使用者們對該功能的實(shí)際需求是切實(shí)存在的。
②不更改μC/OS-II內核代碼實(shí)現時(shí)間片調度?!痘?mu;C/OS-II的時(shí)間片調度法設計》對OS內核代碼作了修改,雖然很少但增加了系統耦合度,對日后的項目維護和第三方升級都是不利的。如果存在完全不用更改內核而僅基于OS服務(wù)的正常調用的實(shí)現方案,對系統的可靠性和移植性都是有益的。
③相對μC/OS-III,μC/OS-II仍然有廣泛的應用領(lǐng)域。μC/OS-III作出了重大的改進(jìn),增加了時(shí)間片調度,擴展了任務(wù)數的限制,允許了同等優(yōu)先級任務(wù)的存在,更多新特性的引入帶來(lái)了內核結構的重整以及運行時(shí)開(kāi)銷(xiāo)的增加。雖然可以通過(guò)配置優(yōu)化系統,但就大部分的應用而言,μC/OS-II完全能夠勝任,至少不需要僅僅為了時(shí)間片調度功能而選用μC/OS-III。

1 調度原理
該調度算法對系統的要求有兩點(diǎn):首先要建立一個(gè)額外的調度任務(wù)用于管理待調度的用戶(hù)任務(wù)時(shí)間片計時(shí)及其切換,我們將其命名為T(mén)askRB_Scheduler;其次是保證其任務(wù)優(yōu)先級高于所有的待調度時(shí)間片任務(wù),保證調度任務(wù)能搶占所有被調度任務(wù)的控制權。
我們假設系統中有3個(gè)任務(wù)需要分享時(shí)間片,分別為T(mén)askRB_1、TaskRB_2、TaskRB_3。為了實(shí)現時(shí)間片的調度功能,還需要額外的調度任務(wù)TaskRB Scheduler,于是系統中的將會(huì )有4個(gè)任務(wù)。其中,TaskRB Scheduler由初始化代碼創(chuàng )建,而待調度的3個(gè)用戶(hù)任務(wù)的創(chuàng )建和管理完全由TaskRB Scheduler任務(wù)來(lái)完成。
TaskRB_Scheduler的運行分為兩個(gè)階段:首先是初始化階段,負責所有時(shí)間片任務(wù)的創(chuàng )立并確保其處于Suspend狀態(tài);然后是調度運行階段,如圖1所示。

本文引用地址:http://dyxdggzs.com/article/201809/388720.htm


下面對照圖1對調度運行階段的各個(gè)步驟進(jìn)行描述。
①TaskRB_Scheduler通過(guò)調用OSTaskResume使TaskRB_1處于Ready狀態(tài)(其他任務(wù)處于Suspend態(tài))。
②TaskRB_Scheduler調用OSTimeDly釋放控制權進(jìn)入延時(shí)等待狀態(tài),延時(shí)參數即為T(mén)askRB_1任務(wù)運行的時(shí)間片長(cháng)度,此時(shí)唯一處于Ready態(tài)的用戶(hù)任務(wù)TaskRB_1獲得控制權進(jìn)入Running狀態(tài)。
③OSTimeDly超時(shí)發(fā)生,TaskRB_Schedulcr處于Rcady態(tài)并且由于任務(wù)優(yōu)先級高于TaskRB_1搶占其控制權,于是TaskRB_Scheduler進(jìn)入運行狀態(tài),TaskRB_1返回Ready態(tài)。
④TaskRB_Scheduler調用OSTaskSuspend讓處于Ready態(tài)的TaskRB_1進(jìn)入Suspend狀態(tài),避免其競爭下一個(gè)時(shí)間片。
⑤~⑧重復①~④步驟,對TaskRB_2分配運行時(shí)間片。
⑨~重復①~④步驟,對TaskRB_3分配運行時(shí)間片。
簡(jiǎn)而言之,調度任務(wù)因為具有最高優(yōu)先級,可以根據時(shí)間片分配表啟動(dòng)并打斷待調度的時(shí)間片任務(wù),雖然時(shí)間片任務(wù)優(yōu)先級各不相同,但通過(guò)確保僅有一個(gè)時(shí)間片任務(wù)處于Readsr態(tài)的方法,避免了不同時(shí)間片任務(wù)之間的競爭
沖突。
為簡(jiǎn)化示意圖,并沒(méi)有標注中斷ISR行為的影響,事實(shí)上ISR只能影響到任務(wù)時(shí)間片的長(cháng)度而不會(huì )影響到任務(wù)片調度的流程;而對于時(shí)間片調度系統而言,通常都采用類(lèi)似于前后臺系統的信號同步策略處理中斷數據,這已經(jīng)不是本文討論的重點(diǎn)。

2 實(shí)現代碼
原理比較簡(jiǎn)單,僅僅給出 TaskRB_Scheduler部分代碼:


3 應用擴展
有項目經(jīng)驗的人都深知Demo和產(chǎn)品有著(zhù)天壤之別,這句話(huà)同樣適用于此時(shí)間片調度方案。在實(shí)際應用中,我們還須關(guān)注到以下幾個(gè)方面。
(1)如何與非時(shí)間片調度任務(wù)協(xié)同工作
對于混合系統而言,作為時(shí)間片調度的任務(wù)通常都對實(shí)時(shí)性要求比較低,因此通常的做法是設置優(yōu)先級:實(shí)時(shí)任務(wù)優(yōu)先級>TaskRB_Sche duler>時(shí)間片任務(wù)>IDLE,時(shí)間片精度會(huì )會(huì )因為實(shí)時(shí)任務(wù)的搶占受到影響。
(2)如何處理時(shí)間片任務(wù)中的critical_section
critical section的處理很重要,我們一般不希望一個(gè)時(shí)間片任務(wù)在發(fā)送UART數據包的過(guò)程中被TaskRB_Scheduler暫時(shí)掐斷,但TaskRB_ Scheduler又的確無(wú)法預知時(shí)間片用戶(hù)的狀態(tài)。有兩種解決辦法:一是通過(guò)調度器上鎖,二是通過(guò)時(shí)間片任務(wù)和調度任務(wù)共享互斥量。顯然,調度器上鎖不是個(gè)好主意,會(huì )封鎖正常的任務(wù)切換,在上述的混合系統中簡(jiǎn)直是不可想象的,但在純粹的時(shí)間片調度系統中不會(huì )帶來(lái)太多的麻煩。共享互斥量增加了系統資源的消耗,在混合系統中的運行時(shí)效率更高。
(3)運行時(shí)配置
TaskRB_Scheduler一方面是時(shí)間片的調度器,另一方面也是一個(gè)普通的μC/OS-II任務(wù),在實(shí)際項目中可以通過(guò)創(chuàng )建任務(wù)鏈表的方式維護管理納入時(shí)間片調度的用戶(hù)任務(wù),在運行時(shí)靈活地添加刪除任務(wù)列表以及調整時(shí)間片寬度。鑒于原理都很簡(jiǎn)單,實(shí)現代碼不再贅述。



關(guān)鍵詞: 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>