嵌入式實(shí)時(shí)操作系統(tǒng)ucos ii譯原版第5章_第1頁
嵌入式實(shí)時(shí)操作系統(tǒng)ucos ii譯原版第5章_第2頁
嵌入式實(shí)時(shí)操作系統(tǒng)ucos ii譯原版第5章_第3頁
嵌入式實(shí)時(shí)操作系統(tǒng)ucos ii譯原版第5章_第4頁
嵌入式實(shí)時(shí)操作系統(tǒng)ucos ii譯原版第5章_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

3.10節(jié)討論了時(shí)鐘的中斷服務(wù)子程序和節(jié)時(shí)鐘節(jié)函數(shù)OSTimeTick——μC/OS本章所提到的函數(shù)可以在OS_TIME.C的長短是用時(shí)鐘節(jié)拍的數(shù)目來確定的。實(shí)現(xiàn)這個(gè)系統(tǒng)服務(wù)的函數(shù)叫做OSTimeDly()。調(diào)用該函程序清單L5.1所示的是任務(wù)延時(shí)函數(shù)OSTimeDly()的代碼。用戶的應(yīng)用程序是通過提供延時(shí)的時(shí)鐘節(jié)拍數(shù)——1655350[L5.1(1)],則表明用戶不想延時(shí)任務(wù),函數(shù)會(huì)立即返回到調(diào)用者。非0函數(shù)OSTimeDly()將當(dāng)前任務(wù)從就緒表中移除[L5.1(2)]。接著,這個(gè)延時(shí)節(jié)拍數(shù)會(huì)被保存在當(dāng)前任務(wù)的OS_TCB中[L5.1(3OSTimeTick延時(shí)節(jié)拍數(shù)。最后,既然任務(wù)已經(jīng)不再處于就緒狀態(tài),任務(wù)調(diào)度程序會(huì)執(zhí)行下一個(gè)優(yōu)先級最L5.1voidvoidOSTimeDly(INT16U{if(ticks>0){if((OSRdyTbl[OSTCBCur->OSTCBY]&=~OSTCBCur->OSTCBBitX)==OSRdyGrp&=~OSTCBCur-}}OSTCBCur->OSTCBDly=}}OSTimeDly(1),在這種情況下,任務(wù)幾乎就沒有Figure DelayOSimlOIS_EREC(參看_G.H轉(zhuǎn)換成時(shí)鐘段,但這種方法有時(shí)顯得比較愚笨。筆者增加了STeDMS就可以按小時(shí)()、分()、秒(S)和毫秒()來定義時(shí)間了,這樣會(huì)顯得更自然些。與Dl()一樣,調(diào)用STmeyHM()函數(shù)也會(huì)使/SSTeDyHM者有其它的任務(wù)通過調(diào)用OTielRsm()取消了延時(shí)(參看5,恢復(fù)延時(shí)的任務(wù)OSTimDlsu程序清單L5.2OSTimeDlyHMSM()的代碼。從中可以看出,應(yīng)用程序是通過用小OSTimeDlyHMSM()一開始先要檢驗(yàn)用戶是否為參數(shù)定義了有效的值[L5.2(1)應(yīng)的毫秒數(shù)相同。例如,若將時(shí)鐘頻率(OS_TICKS_PER_SEC100Hz(10ms4ms示,OSTimeDlyHMSM()確定了用戶想延時(shí)多少次超過65,535個(gè)節(jié)拍的數(shù)目[L5.2(4)]和剩下的節(jié)拍數(shù)[L5.2(5)]。例如,若OS_TICKS_PER_SEC的值為100,用戶想延時(shí)15分鐘,則OSTimeDlyHMSM15x60x100=90,00032,768拍的延時(shí)(因?yàn)橛脩糁荒苎訒r(shí)65,535個(gè)節(jié)拍而不是65536個(gè)節(jié)拍)和一次24,464個(gè)節(jié)拍的延時(shí)。在這種情況下,OSTimeDlyHMSM()首先考慮剩下的節(jié)拍,然后是超過65,535的節(jié)拍數(shù)[L5.2(7)和(8)](即兩個(gè)32,768L5.2{INT32Uticks;INT16Uif(hours>0||minutes>0||seconds>0||milli>0)if(minutes>59)return}if(seconds>59)return}If(milli>999)return}ticks= *3600L*+(INT32U)minutes 60L*+(INT32U)seconds+OS_TICKS_PER_SEC*+500L/OS_TICKS_PER_SEC)/loopsloops=ticks/ticks=ticks%while(loops>0)}return}elsereturn}}OSTimeDlyResumeL5.3任務(wù)存在,OSTimeDlyResume()會(huì)檢驗(yàn)任務(wù)是否在等待延時(shí)期滿[L5.3(3)]。只要OS_TCB域中的OSTCBDly0OSTimeDly(),OSTimeDlyHMSM()或其它在第六章中所描述的PEND函數(shù)。然后延時(shí)就可以通過強(qiáng)制命令L5.3INT8UINT8UOSTimeDlyResume(INT8U{{OS_TCBif(prio>=OS_LOWEST_PRIO)returnptcb=(OS_TCBif(ptcb!=(OS_TCB*)0)if(ptcb->OSTCBDly!=0)ptcb->OSTCBDly=if(!(ptcb->OSTCBStat&OS_STAT_SUSPEND))|=ptcb-OSRdyTbl[ptcb->OSTCBY]|=ptcb->OSTCBBitX;}else}return}elsereturn}}elsereturn}}唯一問題是它要求用戶分配事件控制塊(參看6.00),因此用戶的應(yīng)用程序會(huì)多占用一些RAM。/S2調(diào)用SS49,75010z247通過調(diào)用OimetOTiSeOSme()和STeSL4OSme8L5.4INT32UINT32UOSTimeGet{INT32Uticks=OSTime;return}voidOSTimeSet(INT32U{OSTime=ticks;}開發(fā)板精品網(wǎng)5.3系統(tǒng)時(shí)間,OSTimeGet() C/OS32調(diào)用SSt(494,75010z2497可以通過調(diào)用OTimGetOTimSet(OSTmeG()和STieSeL54OSime832程序清單L5.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論