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

基于μC/OS-II的時間片調(diào)度法設(shè)計

發(fā)布時間:2010-5-12 18:34    發(fā)布者:李寬
關(guān)鍵詞: 調(diào)度法
引言

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



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

1 調(diào)度原理

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

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

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



圖1 基于μC/OSII時間片調(diào)度過程

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

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

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

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

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

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

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

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

2 實現(xiàn)方法

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

① 盡可能少地改動μC/OSII原有的代碼;

② 增加的代碼在風格上保持與原有的相一致;

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

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

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

在進程控制塊中增加兩項:

  Typedef struct os_tcb{

  ……

      #if OS_TASK_TIME_SLICE_EN>0

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

      */INT16UOSTCBTimeSlice;

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

       INT16UOSTCBCounter;

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

       #endif

  }

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

  OS_EXT INT8UOSTSSGrp;

  OS_EXT INT8UOSTSSTbl[OS_RDY_TBL_SIZE];

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

  #defineOS_STAT_TS_USEUP0x40

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

對OS_TCBInit()、OSTimeTick()、OSTimeDly()、OS_EventTaskWait()、 OS_EventTaskRdy()這5個函數(shù)的修改,是在μC/OSII基礎(chǔ)上實現(xiàn)時間片調(diào)度法的關(guān)鍵。下面將一一對這幾個函數(shù)的修改部分進行說明。

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



OSTimeTick()函數(shù)在每個時鐘滴答被調(diào)用,在時間片調(diào)度過程中起到了遞減時間片計數(shù)器的作用。當計數(shù)器為0時,進行任務(wù)切換或是重新給各個任務(wù)分配時間片并開始新一輪調(diào)度。

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

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



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

  OSTSSGrp |= bity;

  OSTSSTbl[y] |= bitx;

3 應(yīng)用實例

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



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

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

結(jié)語

筆者已經(jīng)成功地把這種基于μC/OSII的時間片調(diào)度法運用到車載信息娛樂系統(tǒng)的開發(fā)中。實踐證明,對于含有耗時任務(wù)的系統(tǒng),尤其是在需要嚴格控制耗時任務(wù)運行時間長度的場合,該調(diào)度算法會有一定的便捷性,也能保證系統(tǒng)的實時響應(yīng),而且整個算法只改動了μC/OSII中的少量代碼;還可以根據(jù)實際需要調(diào)整各個任務(wù)的時間片大小,體現(xiàn)出了算法的實用性與靈活性。

參考文獻

   1. Labrosse Jean J.邵貝貝 嵌入式實時操作系統(tǒng)μC/OS-II 2003
   2. 毛德操.胡希明 嵌入式系統(tǒng) 2003
   3. ST Microelectronics STR73X Microcontroller Reference Manual.Version 1.0 2005

作者:上海奧控汽車電子有限公司 吳嵩  曹樂千
來源:單片機與嵌入式系統(tǒng)應(yīng)用 2008 (12)
本文地址:http://m.qingdxww.cn/thread-11206-1-1.html     【打印本頁】

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

廠商推薦

  • Microchip視頻專區(qū)
  • PIC18-Q71系列MCU概述
  • 安靜高效的電機控制——這才是正確的方向!
  • 了解一下Microchip強大的PIC18-Q24 MCU系列
  • 無線充電基礎(chǔ)知識及應(yīng)用培訓教程2
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产青青青 | 大伊人青草狠狠久久 | 国产精品久久免费 | 久草视频免费 | 成年美女黄网站色大片免费看 | 亚洲成人三级 | 另类专区 亚洲 | 黄色高清在线观看 | 韩国一级在线 | 亚洲精品一级毛片 | 免费在线观看黄网 | 日韩黄色一级 | 色综合色综合色综合网址 | 闲人吧综合免费888精品 | 久久久99精品久久久久久 | 久久精品国产99国产精品 | 欧美aaaa在线观看视频免费 | 啊用力啊好深啊h在线观看 啊嗯啊羞羞网站在线观看 啊~用力cao我cao死我公 | 成人在线短视频 | 岛田阳子五十路在线观看 | 欧美在线看欧美视频免费网站 | 日本天堂在线播放 | 九色在线观看视频 | 亚洲成人三级 | 蜜臀首页| 国产精品亚洲欧美 | 久久免费精品高清麻豆 | 日韩成人毛片高清视频免费看 | 一区二区日韩 | 射菊网| 免费永久在线观看污污的网站 | 亚洲麻豆精品 | 日韩成人黄色 | 欧美国产伦久久久久 | 色狠狠狠色噜噜噜综合网 | 日本不卡在线一区二区三区视频 | 成人美女免费网站视频 | 日本精品a在线观看 | 国产成人深夜福利短视频99 | 日韩在线视屏 | 精品日本一区二区三区在线观看 |