国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于μC/0S—II的時(shí)問(wèn)片調(diào)度法設(shè)計(jì)

發(fā)布時(shí)間:2010-8-12 18:09    發(fā)布者:lavida
關(guān)鍵詞: μC/0S
引 言  

μC/0S—II嵌入式實(shí)時(shí)操作系統(tǒng)采用的是基于優(yōu)先級(jí)的可剝奪調(diào)度法。基于優(yōu)先級(jí)的可剝奪調(diào)度法是指,CPU總是讓處于就緒態(tài)的、優(yōu)先級(jí)最高的任務(wù)運(yùn)行;最高優(yōu)先級(jí)的任務(wù)一旦就緒,總能得到CPU的使用權(quán),當(dāng)一個(gè)運(yùn)行著的任務(wù)使一個(gè)比它優(yōu)先級(jí)高的任務(wù)進(jìn)入了就緒態(tài)時(shí),當(dāng)前任務(wù)的CPU使用權(quán)就被剝奪了,更高優(yōu)先級(jí)的任務(wù)立刻得到了CPU的使用權(quán)。除非最高優(yōu)先級(jí)的任務(wù)主動(dòng)放棄CPU的使用權(quán)(通過(guò)調(diào)用0STimeDly()、0SSem—Pend()等函數(shù)),否則低優(yōu)先級(jí)的任務(wù)是沒(méi)機(jī)會(huì)獲得CPU使用權(quán)的。對(duì)于一個(gè)實(shí)際應(yīng)用系統(tǒng)中耗時(shí)比較長(zhǎng)的任務(wù),為了讓其他任務(wù)能夠得到實(shí)時(shí)調(diào)度,可以用兩種方法來(lái)處理。第一種方法是把該任務(wù)的優(yōu)先級(jí)設(shè)為最低(當(dāng)然還是比空閑任務(wù)要高);第二種方法就是讓該耗時(shí)任務(wù)運(yùn)行一段時(shí)間后延時(shí)一下再繼續(xù)運(yùn)行,即把整個(gè)任務(wù)劃分為若干步驟來(lái)執(zhí)行,如以下的示例代碼:  



  


很多情況下,耗時(shí)長(zhǎng)的任務(wù)并不能設(shè)置為最低優(yōu)先級(jí)任務(wù),而劃分步驟來(lái)執(zhí)行的方法不但繁瑣而且每一步執(zhí)行的時(shí)間也是不確定的(其他低優(yōu)先級(jí)任務(wù)獲得CPU使用權(quán)的時(shí)間也會(huì)是不確定的)。筆者在用μC/OS—II開(kāi)發(fā)一款車(chē)載信息娛樂(lè)系統(tǒng)的時(shí)候就碰到了這樣的問(wèn)題,因此設(shè)計(jì)了一種優(yōu)先級(jí)和時(shí)間片相結(jié)合的調(diào)度法(也就是基于μC/0S—II的時(shí)間片調(diào)度法)。  

1 調(diào)度原理  

這種調(diào)度法給處于就緒態(tài)的每一個(gè)任務(wù)都分配一個(gè)時(shí)間片(優(yōu)先級(jí)越高分配的時(shí)間片越長(zhǎng),空閑任務(wù)得不到時(shí)間片的分配),內(nèi)核按照任務(wù)的優(yōu)先級(jí)依次調(diào)度處于就緒態(tài)的任務(wù),即當(dāng)就緒態(tài)中最高優(yōu)先級(jí)的任務(wù)用完自己的時(shí)間片后,CPU控制權(quán)轉(zhuǎn)讓給就緒態(tài)中優(yōu)先級(jí)第二高的任務(wù)。該任務(wù)用完自己的時(shí)間片后,CPU控制權(quán)又轉(zhuǎn)讓給下一優(yōu)先級(jí)的就緒態(tài)任務(wù)……當(dāng)就緒態(tài)的每一個(gè)任務(wù)都被調(diào)度一次之后將重新為它們分配時(shí)間片,然后又開(kāi)始新一輪的調(diào)度……  

其中要注意的是,在調(diào)度過(guò)程中如果有一個(gè)比當(dāng)前任務(wù)優(yōu)先級(jí)更高的任務(wù)由其他態(tài)變成了就緒態(tài)(被創(chuàng)建或獲取了一個(gè)信號(hào)量等),當(dāng)前任務(wù)的CPU控制權(quán)將被剝奪;空閑任務(wù)仍然是等到其他任務(wù)都退出就緒態(tài)才獲得CPU的使用權(quán)。  



  


圖1解釋了該調(diào)度法的調(diào)度過(guò)程(其中任務(wù)1優(yōu)先級(jí)最高,任務(wù)2次之,任務(wù)3最低)。  

①任務(wù)2和任務(wù)3都處于就緒態(tài),任務(wù)1在等待一個(gè)信號(hào)量,優(yōu)先級(jí)中的任務(wù)2獲得CPU使用權(quán)。  

②任務(wù)2的時(shí)間片用完,優(yōu)先級(jí)低的任務(wù)3獲得CPU使用權(quán)。  

③任務(wù)3的時(shí)間片用完,任務(wù)2重新獲得CPU的使用權(quán)。  

④任務(wù)2的時(shí)間片還沒(méi)用完時(shí)中斷來(lái)臨,中斷服務(wù)程序獲得CPU使用權(quán)。  

⑤中斷服務(wù)程序發(fā)送了一個(gè)任務(wù)1等待的信號(hào)量,中斷服務(wù)完成后優(yōu)先級(jí)高的任務(wù)1獲得CPU使用權(quán)。  

⑥任務(wù)1的時(shí)間片用完,任務(wù)2繼續(xù)運(yùn)行。  

⑦任務(wù)2的時(shí)間片用完,任務(wù)3獲得CPU使用權(quán)。  

⑧任務(wù)3的時(shí)間片用完,重新分配時(shí)間片,新一輪調(diào)度開(kāi)始。  

2 實(shí)現(xiàn)方法  

在調(diào)度算法的實(shí)現(xiàn)過(guò)程中,力求做到3點(diǎn):  

①盡可能少地改動(dòng)μC/0S—II原有的代碼;  

②增加的代碼在風(fēng)格上保持與原有的相一致;  

③兼容原有的優(yōu)先級(jí)調(diào)度法(可以很方便地選擇優(yōu)先級(jí)調(diào)度法或是時(shí)間片調(diào)度法)。  

注:對(duì)于該小節(jié)中出現(xiàn)的代碼,如果是筆者增加的部分都用黑體表示。  

2.1 數(shù)據(jù)結(jié)構(gòu)中增加的變量  

在進(jìn)程控制塊中增加兩項(xiàng):  

Typedef struct os_tcb{  

……  

#if OS_TASK_TIME_SLICE-EN>0  

/*條件編譯,OS_TASK_TIME_SLICE_EN在os_cfg.h中定義,凡是涉及與時(shí)間片調(diào)度相關(guān)的代碼都用條件編譯。這樣,可以通過(guò)更改配置文件很方便地選擇任務(wù)調(diào)度法*/  

INT16U OSTCBTimeSlice;  

/*任務(wù)的時(shí)間片大小,在任務(wù)創(chuàng)建時(shí)被初始化,運(yùn)行過(guò)程中保持不變*/  

INT16U OSTCBCounter;  

/*任務(wù)運(yùn)行剩余時(shí)間計(jì)數(shù)器,每一輪調(diào)度開(kāi)始時(shí)該變量被賦值(等于OSTCBTimeSlice),運(yùn)行過(guò)程中不斷遞減。當(dāng)其等于0時(shí)任務(wù)被剝奪CPU使用權(quán)*/  

#endif  

}  

由于當(dāng)前任務(wù)的時(shí)間片使用完時(shí),該任務(wù)將被從就緒表OSRdyGrp以及OSRdyTbl[OS_RDY_TBL_SIZE]中清除;新一輪調(diào)度開(kāi)始時(shí)它又必須被恢復(fù),因此筆者在uC0S_II.h文件中增加以下變量(不妨把它們稱為“時(shí)間片調(diào)度表”)分別用于保存OSRdyGrp和OSRdyTbl[OS_RDY_TBL_SIZE]。  

OS_EXT INT8U OSTSSGrp;  

OS_EXT INT8U OSTSSTbl[OS_RDY_TBL_SIZE];  

另外,在uCOS_II.h文件中增加宏定義,用于表示任務(wù)時(shí)間片被用完這種狀態(tài):  

#define OS_STAT_TS_USEUP 0x40  

2.2 相關(guān)函數(shù)的修改  

對(duì)0S_TCBInit()、OSTimeTick()、OSTimeD1y()、OS_EventTaskWait()、OS_EventTaskRdy()這5個(gè)函數(shù)的修改,是在μC/OS—II基礎(chǔ)上實(shí)現(xiàn)時(shí)間片調(diào)度法的關(guān)鍵。下面將一一對(duì)這幾個(gè)函數(shù)的修改部分進(jìn)行說(shuō)明。  

在初始化任務(wù)控制塊的函數(shù)0S_TCBInit()中,筆者添加以下代碼讓新創(chuàng)建的任務(wù)處于時(shí)間片就緒表中,并根據(jù)任務(wù)優(yōu)先級(jí)對(duì)任務(wù)的時(shí)間片大小進(jìn)行初始化。  



  


0STimeTick()函數(shù)在每個(gè)時(shí)鐘滴答被調(diào)用,在時(shí)間片調(diào)度過(guò)程中起到了遞減時(shí)間片計(jì)數(shù)器的作用。當(dāng)計(jì)數(shù)器為0時(shí),進(jìn)行任務(wù)切換或是重新給各個(gè)任務(wù)分配時(shí)間片并開(kāi)始新一輪調(diào)度。  

OSTimeDly()函數(shù)的作用是將任務(wù)延時(shí)一定的時(shí)間。這種情況下,應(yīng)該把該任務(wù)從時(shí)間片調(diào)度表中清除。  

當(dāng)某個(gè)任務(wù)須等待一個(gè)事件的發(fā)生時(shí),信號(hào)量、互斥型信號(hào)量、郵箱及消息隊(duì)列會(huì)通過(guò)相應(yīng)的PEND函數(shù)調(diào)用函數(shù)OS_EventTaskwait(),使當(dāng)前任務(wù)從就緒任務(wù)表中脫離就緒態(tài),此時(shí)還需把當(dāng)前任務(wù)從時(shí)問(wèn)片調(diào)度表中清除。筆者在OS_EventTaskWait()函數(shù)中添加了以下代碼:  



  


相應(yīng)地,當(dāng)某個(gè)事件發(fā)生了,信號(hào)量、互斥型信號(hào)量、郵箱及消息隊(duì)列會(huì)通過(guò)相應(yīng)的POST函數(shù)調(diào)用OS_Even—tTaskRdy(),從等待任務(wù)隊(duì)列中使最高優(yōu)先級(jí)任務(wù)脫離等待狀態(tài),此時(shí)還需要把該任務(wù)添加到時(shí)間片調(diào)度表中。筆者在0S_EventTaskRdy()函數(shù)中添加了以下代碼:  

OSTSSGrp |=bity;  

OSTSSTbl[y]|=bitx;  

3 應(yīng)用實(shí)例  

筆者首先把μC/0S—II移植到開(kāi)發(fā)板上(MCU意法半導(dǎo)體生產(chǎn)的基于ARM7TDMI核的STR730),然后如2小節(jié)所述對(duì)相關(guān)部分的源代碼進(jìn)行修改,接下來(lái)將優(yōu)先級(jí)調(diào)度法和基于μC/0S—II的時(shí)間片調(diào)度法進(jìn)行比較。為此分別建立了2個(gè)任務(wù)Task_TimeConsuming()、Task_Audio(),任務(wù)的優(yōu)先級(jí)分別是5、6。  



  


由于模擬的耗時(shí)任務(wù)Task_TimeConsuming()是個(gè)死循環(huán)且沒(méi)有調(diào)用OSTimeDly()函數(shù),其優(yōu)先級(jí)又比Task_Audio()高,如果完全按照優(yōu)先級(jí)調(diào)度,系統(tǒng)不會(huì)有聲音輸出,因?yàn)樨?fù)責(zé)聲音控制的任務(wù)Task_Audio一直得不到運(yùn)行。而如果按照時(shí)間片調(diào)度(在os_cfg.h中增加#defineOS_TASK_TIME_SLICE_EN 1),則聲音輸出正常,通過(guò)仿真器在Task_Audio()中設(shè)置斷點(diǎn),程序會(huì)很快停止在斷點(diǎn)處。進(jìn)一步地,依次在Task_TimeConsuming()和Task_Audio()函數(shù)體中設(shè)置斷點(diǎn),分別記錄兩次PC指針停止在斷點(diǎn)處時(shí)看門(mén)狗計(jì)數(shù)器的值WDG_Counterl和WDG_Counter2,可以利用WDG_Counter1和WDG_Counter2的差值估算出任務(wù)Task_Audio前后兩次被調(diào)度的時(shí)間間隔(忽略任務(wù)在切換過(guò)程中的耗時(shí))。經(jīng)過(guò)多次計(jì)算,這個(gè)時(shí)間間隔值的范圍在58~59 ms,而任務(wù)Task_TimeConsuming的時(shí)間片理論值=64一Prio=64—5=59 ms,實(shí)驗(yàn)值與理論值是非常吻合的。  

當(dāng)然,這只是簡(jiǎn)單的驗(yàn)證實(shí)驗(yàn)。嚴(yán)格的測(cè)試還需要兼顧信號(hào)量、互斥型信號(hào)量、郵箱及消息隊(duì)列相應(yīng)的PEND、POST函數(shù)以及0STimeDly()函數(shù)調(diào)用。鑒于篇幅關(guān)系,這里就不再贅述了。  

結(jié) 語(yǔ)  

筆者已經(jīng)成功地把這種基于μC/0S—II的時(shí)間片調(diào)度法運(yùn)用到車(chē)載信息娛樂(lè)系統(tǒng)的開(kāi)發(fā)中。實(shí)踐證明,對(duì)于含有耗時(shí)任務(wù)的系統(tǒng),尤其是在需要嚴(yán)格控制耗時(shí)任務(wù)運(yùn)行時(shí)間長(zhǎng)度的場(chǎng)合,該調(diào)度算法會(huì)有一定的便捷性,也能保證系統(tǒng)的實(shí)時(shí)響應(yīng),而且整個(gè)算法只改動(dòng)了μC/OS—II中的少量代碼;還可以根據(jù)實(shí)際需要調(diào)整各個(gè)任務(wù)的時(shí)間片大小,體現(xiàn)出了算法的實(shí)用性與靈活性。
本文地址:http://www.qingdxww.cn/thread-21089-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來(lái)節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精久久一区二区三区 | 天天摸日日摸 | 国产三级视频网站 | 日本深夜福利19禁在线播放 | 久久久久久久国产精品影院 | 久久久久久久久久久久久久 | 久久福利免费视频 | 五月婷综合网 | 欧美成人免费一区在线播放 | 女人被男人插视频 | 久久福利影院 | 日韩天堂在线 | 青青草色青伊人 | 家庭教师日本 | 在线a免费观看 | 中文字幕一区二区三区免费看 | va网站 | 97在线观看永久免费视频下载 | 中文字幕在线播放量 | 99久久综合狠狠综合久久 | 亚洲天天在线 | 亚洲aⅴ | 99香蕉国产线观看免费 | 91久久福利国产成人精品 | 婷婷综合五月天 | 日本色婷婷| 久久99青青久久99久久 | 视色在线| 免费一级毛片在线播放不收费 | 在线观看日本www | 亚洲男人天堂网址 | 精品国偷自产在线 | 色噜噜久久 | 国产精品页 | 落跑甜心电视剧全集在线观看 | 国产中文在线观看 | 久久大伊人 | 国产精品高清免费网站 | 亚洲最大的成网4438 | 欧美伊人网 | www.99精品|