版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
5.4時間片輪詢多任務(wù)操作系統(tǒng)目錄1概述2整體規(guī)劃3任務(wù)控制塊4內(nèi)部變量初始化5創(chuàng)建任務(wù)6啟動多任務(wù)環(huán)境longjmpInIsr()
9任務(wù)調(diào)度7時鐘節(jié)拍中斷8任務(wù)延時10刪除任務(wù)11運行的任務(wù)難以得知其他任務(wù)狀態(tài),任務(wù)切換時機難以把握。如果一個任務(wù)死掉,勢必造成整個系統(tǒng)死掉。協(xié)作式多任務(wù)系統(tǒng)任務(wù)協(xié)作式多任務(wù)系統(tǒng)的特點安全性復(fù)雜性協(xié)作式多任務(wù)系統(tǒng)中,任務(wù)切換需正在運行的任務(wù)主動讓出CPU,這不僅帶來一些安全隱患,而且使程序設(shè)計相當?shù)膹?fù)雜。任務(wù)調(diào)度任務(wù)調(diào)度交給操作系統(tǒng),引入調(diào)度算法調(diào)度算法時間片輪詢1優(yōu)先級調(diào)度2帶優(yōu)先級調(diào)度的時間片輪詢3調(diào)度算法時間片輪詢1tt任務(wù)的運行時間時間片輪詢系統(tǒng)中任務(wù)運行情況在時間片輪詢操作系統(tǒng)中,CPU的執(zhí)行時間被劃分為若干時間片,然后讓處于就緒狀態(tài)的任務(wù),按順序輪流占用CPU。當時間片用完時,即使任務(wù)未執(zhí)行完,系統(tǒng)也剝奪此任務(wù)的CPU使用權(quán)力。時間片長度Δt一般為1~10ms
優(yōu)先級調(diào)度2帶優(yōu)先級調(diào)度的時間片輪詢3任務(wù)A
任務(wù)B任務(wù)C
所有任務(wù)相同對待,分時運行。調(diào)度算法時間片輪詢1優(yōu)先級調(diào)度2帶優(yōu)先級調(diào)度的時間片輪詢3+
低優(yōu)先級+
中優(yōu)先級+
高優(yōu)先級任務(wù)A
任務(wù)B任務(wù)C
t高優(yōu)先級任務(wù)先運行t高優(yōu)先級任務(wù)搶占低優(yōu)先級任務(wù)不同任務(wù)不同對待,優(yōu)先級高任務(wù)的先運行。調(diào)度算法時間片輪詢1優(yōu)先級調(diào)度2帶優(yōu)先級調(diào)度的時間片輪詢3這種調(diào)度算法情況較復(fù)雜,類型較多,自己去學(xué)習(xí)了解。任務(wù)切換時機分配給任務(wù)的時間片已到任務(wù)主動請求調(diào)度12任務(wù)在調(diào)用操作系統(tǒng)提供的“管理”類服務(wù)(如刪除任務(wù)等)和“等待”類服務(wù)(如延時、獲取信號量、等待消息等)時,會主動請求調(diào)度。操作系統(tǒng)采用一個周期性的中斷來管理時間片,在這個中斷服務(wù)函數(shù)中,判斷運行的任務(wù)是否用完了時間片。中斷中切換任務(wù)使用時間片輪詢調(diào)度的操作系統(tǒng)中,會在兩種下進行任務(wù)切換。目錄2整體規(guī)劃1概述34任務(wù)控制塊內(nèi)部變量初始化時間片輪詢操作系統(tǒng)規(guī)劃時間片輪詢調(diào)度算法時間片輪詢多任務(wù)操作系統(tǒng)協(xié)作式多任務(wù)系統(tǒng)TinyOS51V1.0TinyOS51V1.1
TinyOS51V1.1采用最簡單的時間片輪詢調(diào)度算法,在每個時鐘節(jié)拍中斷時調(diào)度,即分配給任務(wù)的時間片為一個時鐘節(jié)拍。
這樣,在任務(wù)控制塊中不僅不需要保存時鐘任務(wù)剩余的時鐘節(jié)拍,而且也不必編寫計算任務(wù)的剩余時間和設(shè)置任務(wù)時間片的代碼。TinyOS51從V1.0到V1.1的的改變TinyOS51V1.0TinyOS51v1.1任務(wù)調(diào)度函數(shù)tnOsSched()__tnOsSched()任務(wù)延時函數(shù)無tnOsTimeDly()時鐘節(jié)拍處理函數(shù)無tnOsTimeTick()TinyOS51V1.0和TinyOS51V1.1的API不同點提供操作作系統(tǒng)的的一種基基本服務(wù)務(wù)——延時服務(wù)務(wù),延時時以時鐘鐘節(jié)拍為為單位。。在TinyOS51中,時鐘鐘節(jié)拍中中斷由用用戶實現(xiàn)現(xiàn),在時時鐘節(jié)拍拍中斷處處理函數(shù)數(shù)中調(diào)用用tnOsTimeTick()。voidtask0(void){TMOD=(TMOD&0xF0)|0x01;TL0=0x00;//TH0=0x00;//初始化timer0,即TR0=1;//初始化時鐘鐘節(jié)拍ET0=1;//中斷。TF0=0;//while(1){__GucTask0++;}}/**一個簡單的的任務(wù),無無限循環(huán)中中讓*__GucTask0++。*/voidtask1(void){while(1){__GucTask0++;}}/**用戶實現(xiàn)時時鐘節(jié)拍中中斷服務(wù)函函數(shù),*并調(diào)用tnOsTimeTick()。*/voidtimer0ISR(void)__interrupt1{tnOsTimeTick();}/**1.初始化系統(tǒng)統(tǒng)*2.創(chuàng)建任務(wù)*3.啟動系統(tǒng)*/voidmain(void){tnOsInit();tnOsTaskCreate(task0,__GucTaskStks[0];tnOsTaskCreate(task1,__GucTaskStk[1]);tnOsStart();}資源配置與與示例任務(wù)函數(shù)task0()和task1()時鐘節(jié)拍中中斷服務(wù)函函數(shù)timer0ISR()main函數(shù)main()staticidataunsignedchar__GucTaskStk[2][32];staticunsignedchar__GucTask0;staticunsignedchar__GucTask1;//分配任務(wù)堆堆棧//任務(wù)0測試變量//任務(wù)1測試變量全局變量定定義函數(shù)實現(xiàn)目錄錄3任務(wù)控制塊塊45內(nèi)部變量初初始化創(chuàng)建任務(wù)12概述整體規(guī)劃任務(wù)控制塊塊TinyOS51V1.1增加加了了延延時時服服務(wù)務(wù)功功能能,,因因此此,,在在TCB中增增加加了了一一個個記記錄錄時時間間的的成成員員uiTicks。#define__TN_TASK_FLG_DEL0x00//任務(wù)務(wù)被被刪刪除除#define__TN_TASK_FLG_RDY0x01//任務(wù)務(wù)就就緒緒#define__TN_TASK_FLG_DLY0x02//任務(wù)務(wù)延延時時structtn_os_tcb{jmp_bufjbTaskContext;//任務(wù)務(wù)上上下下文文unsignedcharucTaskStat;//任務(wù)務(wù)狀狀態(tài)態(tài)unsignedintuiTicks;//任務(wù)務(wù)延延時時時時間間};typedefstructtn_os_tcbTN_OS_TCB;staticdataTN_OS_TCB__GtcbTasks[TN_OS_MAX_TASKS];//任務(wù)務(wù)控控制制塊塊數(shù)數(shù)組組與任任務(wù)務(wù)控控制制塊塊相相關(guān)關(guān)代代碼碼::目錄錄4內(nèi)部部變變量量初初始始化化56創(chuàng)建建任任務(wù)務(wù)啟動動多多任任務(wù)務(wù)環(huán)環(huán)境境23整體體規(guī)規(guī)劃劃任務(wù)務(wù)控控制制塊塊tnOsInit()voidtnOsInit(void){TN_OS_TASK_HANDLEthTask;//操作作的的任任務(wù)務(wù)for(thTask=0;thTask<TN_OS_MAX_TASKS;thTask++){__GtcbTasks[thTask].ucTaskStat=__TN_TASK_FLG_DEL;//任務(wù)務(wù)初初始始處處于于刪刪除除狀狀態(tài)態(tài)__GtcbTasks[thTask].uiTicks=0;//設(shè)置置初初值值}__GthTaskCur=0;//初始始運運行行0號任任務(wù)務(wù)}由于于TCB增加加了了一一個個uiTicks,則則在在tnOsInit()中進進行行初初始始化化。。OS初始始化化函函數(shù)數(shù)代代碼碼::目錄錄5創(chuàng)建建任任務(wù)務(wù)67啟動動多多任任務(wù)務(wù)環(huán)環(huán)境境任務(wù)務(wù)調(diào)調(diào)度度34任務(wù)務(wù)控控制制塊塊內(nèi)部部變變量量初初始始化化通常常,,為為了了提提高高可可移移植植性性,,采采用用一一個個宏宏或或函函數(shù)數(shù)來來編編寫寫實實現(xiàn)現(xiàn)開開中中斷斷和和關(guān)關(guān)中中斷斷程程序序。。由由于于TinyOS51僅適適合合80C51系列列單單片片機機,,故故直直接接使使用用““EA=0”和和““EA=1”。。創(chuàng)建建任任務(wù)務(wù)函函數(shù)數(shù)tnOsTaskCreate()由于于tnOsTaskCreate()要操操作作TCB,而而時時鐘鐘節(jié)節(jié)拍拍中中斷斷中中也也要要操操作作TCB,因因此此tnOsTaskCreate()中操操作作TCB的代代碼碼為為臨臨界界區(qū)區(qū)代代碼碼,,要要避避免免被被時時鐘鐘節(jié)節(jié)拍拍中中斷斷打打斷斷。。TinyOS51中采采用用開/關(guān)中中斷斷的方方式式解解決決此此問問題題。。TN_OS_TASK_HANDLEtnOsTaskCreate(void(*pfuncTask)(void),idataunsginedchar*pucStk){TN_OS_TASK_HANDLEthRt;for(thRt=0;thRt<TN_OS_MAX_TASKS;thRt++){EA=0;//禁止中斷if(__GtcbTasks[thRt].ucTaskStat==__TN_TASK_FLG_DEL){setTaskJmp(pfuncTask,pucStk,__GtcbTasks[thRt].jbTaskContext);__GtcbTask[thRt].ucTaskStat=__TN_TASK_FLG_RDY;EA=1;//允許中斷returnthRt;}EA=1;//允許中斷}目錄錄6啟動多任務(wù)環(huán)環(huán)境78任務(wù)調(diào)度時鐘節(jié)拍中斷斷45內(nèi)部變量初始始化創(chuàng)建任務(wù)tnOsStart()在TinyOS51V1.1中,如果不允允許中斷,則則時鐘節(jié)拍中中斷服務(wù)程序序不會運行,,因此,在tnOsStart()中增加允許中中斷的代碼。。voidtnOsStart(void){EA=1;//允許中斷l(xiāng)ongjmp(__GtcbTask[0].jbTaskContext);//執(zhí)行0號任務(wù)}tnOsInit()中__GthTaskCur=0,即當前運行任任務(wù)為0號任務(wù)。目錄錄7任務(wù)調(diào)度89時鐘節(jié)拍中斷斷l(xiāng)ongjmpInIsr()56創(chuàng)建任務(wù)啟動多任務(wù)環(huán)環(huán)境__tnOsSched()tnOsSched()開/關(guān)中斷代碼__tnOsSched()TinyOS51V1.0TinyOS51V1.1任務(wù)調(diào)度函數(shù)數(shù)__tnOsSched()中也要操作TCB,因此也需要要加入開/關(guān)中斷代碼包包含臨界區(qū)。。另外,__tnOsSched()不再提供給任任務(wù)直接調(diào)用用,僅供內(nèi)部部調(diào)用,因此此添加前綴““__”。保護臨界資源源目錄錄8時鐘節(jié)拍中斷斷9longjmpInIsr()任務(wù)延時67啟動多任務(wù)環(huán)環(huán)境任務(wù)調(diào)度10如果uiTicks不為0,則uiTicks--,即縮短延時時時間。未使使用任務(wù)狀態(tài)態(tài)標志判斷任任務(wù)是否處于于延時狀態(tài)。。這是因為TinyOS51更高的版本具具有超時功能能,需要使用用uiTicks來判斷任務(wù)是是否超時。如果uiTicks為0,則將任務(wù)設(shè)設(shè)置為就緒狀狀態(tài)。為了向向上兼容超時時代碼,即區(qū)區(qū)分系統(tǒng)服務(wù)務(wù)是正常返回回還是超時返返回,未直接接將任務(wù)設(shè)置置為就緒狀態(tài)態(tài),而使用““|=”操作。時鐘節(jié)拍中斷斷大多數(shù)操作系系統(tǒng)中的延時時管理和中斷斷服務(wù)程序中中的任務(wù)切換換功能,分別別是用兩個函函數(shù)實現(xiàn)的,,由于TinyOS51V1.1是純粹的時間間片輪詢操作作系統(tǒng),非時時鐘節(jié)拍中斷斷的中斷服務(wù)務(wù)程序不進行行任務(wù)切換操操作,因此將將二者合二為為一。for(thTask=0;thTask<TN_OS_MAX_TASKS;thTask++){if(__GtcbTasks[thTask].uiTicks!=0){__GtcbTasks[thTask].uiTicks--;//縮短延時時間間if(__GtcbTasks[thTask].uiTicks==0){__GtcbTasks[thTask].ucTaskStat|=__TN_TASK_FLG_RDY;//設(shè)置任務(wù)就緒緒狀態(tài)位}}}}延時管理1任務(wù)切換2對于80C51來說,規(guī)定::一般函數(shù)返返回使用RET指令,而中斷斷返回使用RETI指令。由于longjmp()函數(shù)是使用RET指令返回的,,如果在時鐘鐘節(jié)拍中斷中中繼線使用longjmp(),則任務(wù)切換換后CPU會認為中斷仍仍未退出,同同級中斷(包包括自身)將將被屏蔽,從從而造成整個個系統(tǒng)執(zhí)行錯錯誤。因此必必須將longjmp()函數(shù)改為longjmpInIsr()。時鐘節(jié)拍中斷斷大多數(shù)操作系系統(tǒng)中的延時時管理和中斷斷服務(wù)程序中中的任務(wù)切換換功能,分別別是用兩個函函數(shù)實現(xiàn)的,,由于TinyOS51V1.1是純粹的時間間片輪詢操作作系統(tǒng),非時時鐘節(jié)拍中斷斷的中斷服務(wù)務(wù)程序不進行行任務(wù)切換操操作,因此將將二者合二為為一。for(thTask=0;thTask<TN_OS_MAX_TASKS;thTask++){thTmp2++;if(thTmp2>=TN_OS_MAX_TASKS){thTmp2=0;}if((__GtcbTasks[thTmp2].ucTaskStat&__TN_TASK_FLG_RDY)!=0){cTmp1=setjump(__GtcbTask[__GthTaskCur].jbTaskContext);//保持上下文if(cTmep1==0){__GthTaskCur=thTmp2;longjmpInIsr(__GtcbTasks[thTmp2].jbTaskContext);//中斷中切換上上下文}}}延時管理1任務(wù)切換2目錄錄9longjmpInIsr()任務(wù)延時刪除任務(wù)78任務(wù)調(diào)度時鐘節(jié)拍中斷斷1110中斷中切換任任務(wù)在中斷中切換換任務(wù),不能能再使用longjmp(),因為中斷需需要使用專用用返回指令RETI,非RET指令。charlongjmpInIsr(jmp_bufBuf)__naked{unsignedcharucSpSave;//用于保存堆棧棧指針的變量量dataunsignedchar*pucBuf=(datavoid*)0;//指向上下文信信息存儲位置置的指針pucBuf=(dataunsignedchar*)jbBuf;ucSpSave=*pucBuf++;bp=*pucBuf++;*((dataunsignedchar*)((char)(ucSpSave)))=*pucBuf++;*((dataunsignedchar*)((char)(ucSpSave––1)))=*pucBuf;SP=ucSpSave;DPL=1;_asmRETI_endasm;}將DPL設(shè)置為1,使返回值為為1。因為SDCC51規(guī)定:char類型返回值保保存在DPL中。采用__naked修飾,表示此此函數(shù)是無保保護的,即編編譯器不會生生成此函數(shù)的的起始和結(jié)尾尾代碼。使用用者將完全控控制這個過程程,這里用于于加入RETI指令。目錄錄任務(wù)延時刪除任務(wù)78時鐘節(jié)拍中斷斷l(xiāng)ongjmpInIsr()1110任務(wù)延時函數(shù)數(shù)tnOsTimeDly()voiddelay(unsignedintuiDly){unsignedinti,
j;for(i=0;i<uiDly;i++){ for(j=0;j<1000;j++){ }}}CPU處于空轉(zhuǎn)狀態(tài),效率太低。傳統(tǒng)延時voidtnOsTimeDly(unsignedintuiTick){if(uiTick!=0){ EA=0; __GtcbTasks[__GthTaskCur].ucTaskStat
=__TN_TASK_FLG_DLY; __GtcbTasks[__GthTaskCur].uiTick=uiTick; EA=1;}__tnOsSched();__GtcbTasks[__GthTaskCur].ucTaskStat
=__TN_TASK_FLG_RDY;
//延時結(jié)束}任務(wù)延時切換到其他任任務(wù)運行設(shè)置延時時間間,讓時鐘節(jié)節(jié)拍處理函數(shù)數(shù)tnOsTimeTick()更新剩余的延延時時間。目錄錄刪除任務(wù)任務(wù)延時78時鐘節(jié)拍中斷斷l(xiāng)ongjmpInIsr()1011刪除任務(wù)函數(shù)數(shù)tnOsTaskDel()與V1.0版本相比,TinyOS51V1.1版本在tnOsTaskDel()函數(shù)中增加了了初始化uiTicks和開/關(guān)中斷代碼。。voidtnOsTaskDel(TN_OS_TASK_HANDLEthTask){…….EA=0;__GtcbTasks[thTask].ucTaskStat=__TN_TASK_FLG_DEL;__GtcbTasks[thTask].uiTicks=0;EA=1;if(thTask==__GthTaskCur){__tnOsSched();}}9、靜夜四四無鄰,,荒居舊舊業(yè)貧。。。12月-2212月-22Saturday,December24,202210、雨中黃葉樹樹,燈下白頭頭人。。07:34:5507:34:5507:3412/24/20227:34:55AM11、以以我我獨獨沈沈久久,,愧愧君君相相見見頻頻。。。。12月月-2207:34:5507:34Dec-2224-Dec-2212、故故人人江江海海別別,,幾幾度度隔隔山山川川。。。。07:34:5507:34:5507:34Saturday,December24,202213、乍乍見見翻翻疑疑夢夢,,相相悲悲各各問問年年。。。。12月月-2212月月-2207:34:5507:34:55December24,202214、他鄉(xiāng)鄉(xiāng)生白白發(fā),,舊國國見青青山。。。24十十二二月20227:34:55上上午07:34:5512月月-2215、比不了得得就不比,,得不到的的就不要。。。。十二月227:34上上午12月-2207:34December24,202216、行動出出成果,,工作出出財富。。。2022/12/247:34:5507:34:5524December202217、做前,,能夠環(huán)環(huán)視四周周;做時時,你只只能或者者最好沿沿著以腳腳為起點點的射線線向前。。。7:34:55上午午7:34上午午07:34:5512月-229、沒有失敗,,只有暫時停停止成功!。。12月-2212月-22Saturday,December24,202210、很多事情情努力了未未必有結(jié)果果,但是不不努力卻什什么改變也也沒有。。。07:34:5507:34:5507:3412/24/20227:34:55AM11、成成功功就就是是日日復(fù)復(fù)一一日日那那一一點點點點小小小小努努力力的的積積累累。。。。12月月-2207:34:5507:34Dec-2224-Dec-2212、世世間間成成事事,,不不求求其其絕絕對對圓圓滿滿,,留留一一份份不不足足,,可可得得無無限限完完美美。。。。07:34:5507:34:5507:34Saturday,December24,202213、不知香香積寺,,數(shù)里入入云峰。。。12月-2212月-2207:34:5507:34:55December24,202214、意志志堅強強的人人能把把世界界放在在手中中像泥泥塊一一樣任任意揉揉捏。。24十十二二月20227:34:55上上午07:34:5512月月-2215、楚塞塞三湘湘接,,荊門門九派派通。。。。十二月月227:34上上午午12月月-2207:34December24,202216、少年十五五二十時,,步行奪得得胡馬騎。。。2022/12/247:34:5507:34:5524December20
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版環(huán)保技術(shù)轉(zhuǎn)移與轉(zhuǎn)化合作協(xié)議4篇
- 2025航空貨運保險及全球理賠服務(wù)合同3篇
- 二零二五年度城市綜合體物業(yè)管理合同
- 二零二五年度高端智能設(shè)備采購合同范本4篇
- 二零二五年度城市更新項目舊廠房改造租賃合同3篇
- 2025年物流倉儲中心委托經(jīng)營與服務(wù)協(xié)議3篇
- 2025版萬科地產(chǎn)商鋪買賣合同規(guī)范范本3篇
- 2025年度體育培訓(xùn)機構(gòu)教練聘用合同模板4篇
- 2025年度出租車企業(yè)資產(chǎn)重組與股權(quán)轉(zhuǎn)讓協(xié)議3篇
- 二零二五年度外墻仿石漆項目融資與投資合同3篇
- 國家中醫(yī)藥管理局發(fā)布的406種中醫(yī)優(yōu)勢病種診療方案和臨床路徑目錄
- 2024年全國甲卷高考化學(xué)試卷(真題+答案)
- 汽車修理廠管理方案
- 人教版小學(xué)數(shù)學(xué)一年級上冊小學(xué)生口算天天練
- (正式版)JBT 5300-2024 工業(yè)用閥門材料 選用指南
- 三年級數(shù)學(xué)添括號去括號加減簡便計算練習(xí)400道及答案
- 蘇教版五年級上冊數(shù)學(xué)簡便計算300題及答案
- 澳洲牛肉行業(yè)分析
- 老客戶的開發(fā)與技巧課件
- 計算機江蘇對口單招文化綜合理論試卷
- 成人學(xué)士學(xué)位英語單詞(史上全面)
評論
0/150
提交評論