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

下載本文檔

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

文檔簡介

開發(fā)板精品網(wǎng)11參考手本章提供了μC/OS-ⅡOSInit(所屬文調(diào)開關(guān)無()參無無注意/警/*/*uC/OS-II/*啟動多任務(wù)內(nèi)核OSIntEnter(所屬文調(diào)開關(guān)中無參無無注意/警OSIntNesting(Intel80x86的實模式,在大模式下編譯,,realmode,largeFARPTR_OSIntEnter;,;AX, DS,;BYTEPTR_OSIntNesting;... OSIntExit(所屬文調(diào)開關(guān)中無參無無注意/, .. FARPTR_OSIntExitOSMboxAccept(所屬文調(diào)開關(guān)參 是指向需要查看的消息郵箱的指針。當(dāng)建立消息郵箱時,該指針返回到用戶程序。(注意/警msgmsgOSMboxAccept(CommMbox*所屬文調(diào)開關(guān)參 注意/警/*/*初始化μC/OS-CommMbox=OSMboxCreate((void*)0); /*建立消息郵箱*/ /*啟動多任務(wù)內(nèi)核*/OSMboxPend(Void*OSMboxPend( *pevent, int8u*err所屬文調(diào)開關(guān)任待同一個消息,μ/-Ⅱ默認最高優(yōu)先級的任務(wù)取得消息并且任務(wù)恢復(fù)執(zhí)行。一個由Ou(調(diào)用Oam參 ieot,55 鐘節(jié)拍內(nèi)接受到需要的消息,OSMboxPend()函數(shù)返回空指針并且將*err設(shè)置為注意/警OS_EVENTOS_EVENTvoidCommTask(void{INT8Uerr;voidfor(;;){..if(err==OS_NO_ERR){../*消息正確的接 .}else../*在指定時間內(nèi)沒有接受到消息.}..}}OSMboxPost(INT8UOSMboxPost(OS_EVENT*pevent,void所屬文調(diào)開關(guān)OboP(中消息的使用也可能不同。如果消息郵箱中已經(jīng)存在消息,返回錯誤碼說明消息郵箱已滿。OboPs參 注意/警OS_EVENT*CommMbox;OS_EVENT*CommMbox; voidCommTaskRx(void{INT8Ufor(;;){..err=OSMboxPost(CommMbox,(void..}}OSMboxQuery( 所屬文調(diào)開關(guān)參 /* INT8UOSEventGrp;OS_NO_ERR:調(diào)用成功 注意/警OS_EVENTOS_EVENTvoidTask(void{OS_MBOXDATAmbox_data; for(;;){..if(err==OS_NO_ERR){ }..}}OS_MEM*OSMemCreate(void*addr,INT32Unblks,INT32Ublksize,INT8U所屬文調(diào)開關(guān)參 OS_MEM_INVALID_PART:沒有空閑的內(nèi)存區(qū)。OS_MEM_INVALID_SIZE:內(nèi)存塊大小不足以容納一個指針變量。注意/警 OSMemGet( *OSMemGet(OS_MEM*pmem,INT8U所屬文調(diào)開關(guān)參 是指向包含錯誤碼的變量的指針。OSMemGet(注意/警voidTask(void{INT8Ufor(;;){if(msg!=(INT8U*)0){ .}..}}OSMemPut(INT8UOSMemPut(OS_MEM*pmem,void所屬文調(diào)開關(guān)參OS_NO_ERR:成功釋放內(nèi)存塊注意/警OSMemQuery(INT8UOSMemQuery(OS_MEM*pmem,OS_MEM_DATA所屬文調(diào)開關(guān)參 INT32U INT32UOSBlkSize;INT32UOSNBlks;INT32UOSNFree;INT32U/*/*/*/*/*/*注意/警OSQAccept( 所屬文調(diào)開關(guān)參 是指向需要查看的消息隊列的指針。當(dāng)建立消息隊列時,該指針返回到用戶程序。(注意/警OS_EVENTOS_EVENTvoidTask(void{voidfor(;;){msg= /*檢查消息隊列if(msg!=(void*)0) /*處理接受的消息.}else /*.}..}}OSQCreate( *OSQCreate(void**start,INT8U所屬文調(diào)開關(guān)參 注意/警OSQFlush(INT8U*SOQFlush(OS_EVENT所屬文調(diào)開關(guān)參 是指向消息隊列的指針。該指針的值在建立該隊列時可以得到。(參考函數(shù)注意/警/*/*初始化μC/OS-err=OSQPend(Void*OSQPend(OS_EVENT*pevent,INT16Utimeout,INT8U所屬文調(diào)開關(guān)任參 是指向即將接受消息的隊列的指針。該指針的值在建立該隊列時可以得到。(ieot 535 注意/警/*OSQPost(INT8UOSQPost(OS_EVENT*pevent,void所屬文調(diào)開關(guān)OQot()tIO)參 是指向即將接受消息的消息隊列的指針。該指針的值在建立該隊列時可以得到。(OS_MBOX_FULL:消息隊列已滿。 注意/警INT8UOSQPostFront(OS_EVENT*pevent,void所屬文調(diào)開關(guān)OQotrt()OQotrt()函數(shù)和OQot()函數(shù)非常相似,不同之處在于OQotrt)就是說,Sorot()(IO)(IO已經(jīng)存滿消息,返回錯誤碼。OQot()函數(shù)立即返回調(diào)用者,消息也沒能發(fā)到隊列。如果參 是指向即將接受消息的消息隊列的指針。該指針的值在建立該隊列時可以得到。( 注意//*將消息放入消息隊列OSQQuery(INT8UOSQQuery(OS_EVENT*pevent,OS_Q_DATA所屬文調(diào)開關(guān)參 /*下一個可用的消息 /*隊列中的消息數(shù)目 /*

/*消息隊列的等待隊列OS_NO_ERR:調(diào)用成功 注意/警OS_EVENTOS_EVENTvoidTask(void{ for(;;){..if(err==OS_NO_ERR){ }..}}OSSchedLock(所屬文調(diào)開關(guān)參無無注意/警OSTimeDly(,OSimeDlyHMSM(,OSSemPend(,OSMboxPend(,OSQPend(OSSchedUnlock(所屬文調(diào)開關(guān)參無無注意/警OSTimeDly(,OSimeDlyHMSM(,OSSemPend(,OSMboxPend(,OSQPend(OSSemAccept( 所屬文調(diào)開關(guān)參 是指向需要查詢的設(shè)備的信號量。當(dāng)建立信號量時,該指針返回到用戶程序。(注意/警OS_EVENT*OSSemCreate(WORD所屬文調(diào)開關(guān)參注意/警OS_EVENTOS_EVENTDispSem=OSSemPend(VoidOSSemPend( *pevent, int8u*err所屬文調(diào)開關(guān)任參 ieot555 注意/OS_EVENTOS_EVENTvoidDispTask(void{INT8Ufor(;;){.. .}}OSSemPost(INT8UOSSemPost(OS_EVENT所屬文調(diào)開關(guān)Omo(Oeo參 OS_NO_ERR:信號量成功的置起OS_SEM_OVF:信號量的值溢出 注意/警/*/*信號量置起/*OSSemQuery(INT8UOSSemQuery(OS_EVENT*pevent,OS_SEM_DATA所屬文調(diào)開關(guān)constantOS_ENENT_TBL_SIZE定義(參閱文件uCOS_II.H)。參INT16UINT16UINT8UINT8UOS_NO_ERR表示調(diào)用成功。注意/OS_SEM_DATAOS_SEM_DATAhighest*x=OSStart(void所屬文調(diào)開關(guān)無參無無注意/調(diào)用OSStart()將不進行任何操作。/*初始化?C/OS-OSStatInit(voidOSStatInit所屬文調(diào)開關(guān)OS_TASK_STAT_EN&&參無無注意/警無/*/*計算CPUINT8UOSTaskChangePrio(INT8Uoldprio,INT8U所屬文調(diào)開關(guān)任參OS_PRO_INALID注意/警voidvoidTaskX(void{INT8Ufor(;;)..err=OSTaskChangePrio(10,..}}INT8UOSTaskCreate(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT8U所屬文調(diào)開關(guān)無參voidTask(void{ /*Dosomethingwith for(;;) ../*在任務(wù)體中必須調(diào)用如下函數(shù)之 ..} 注意/警,OS_STKOS_STK/*初始化?C/OS- /*初始化?C/OS-INT8UOSTaskCreateExt(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT8Uprio,INT16Uid,OS_STK*pbos,INT32Ustk_size,void*pext,INT16Uopt);所屬文調(diào)開關(guān)無Oreet(建立一個新任務(wù)。與Oe(OkreteEt(允參pta中出現(xiàn)“參數(shù)未使用”的警告信息,可以寫一句pdatapdata;譯者注)voidTask(void{ /*對參數(shù)pdata進行操作,例如pdata=pdata for(;;){ /*任務(wù)函數(shù)體.總是為無限循環(huán)結(jié)構(gòu) .. ..}} 應(yīng)用程序中可設(shè)置id與優(yōu)先級相同。高地址向低地址增長。此時pbos應(yīng)該指向任務(wù)堆??臻g的最低地址。反之,如果pbos用于堆棧檢測函數(shù)OSaskStkChk(。作。當(dāng)前的μC/OS版本支持下列操作:注意/警,[–Of–tack,BOSOf–StackINT32U/*初始化?C/OS-strcpy(TaskUserData.TaskName,"MyTaskName");/*/*/*(void[OSTaskStkChk()函數(shù)。程序注釋中的TOS意為堆棧頂端(Top–Of–Stack,BOS意為堆棧底頂端(Bottom–Of–Stack。OS_STKOS_STK/*初始化?C/OS-/*/*/*INT8UOSTaskDel(INT8U所屬文調(diào)開關(guān)De,參OS_TASK_DEL_IDLE:錯誤操作,試圖刪除空閑任務(wù)(Idletask。注意/警OSTaskDel()將判斷用戶是否試圖刪除μC/OS中的空閑任務(wù)(IdletaskOSaskDelRe({INT8UOSTaskDel(INT8UOaDleqRSOSaskD刪除自己。任務(wù)5可以循環(huán)調(diào)用OSTaskDelReq(10)并檢測返回值,如果返回OS_TASK_NOT_EXIST,表明任務(wù)10已經(jīng)成功刪除。參OS_TASK_DEL_IDLE:錯誤操作,試圖刪除空閑任務(wù)(Idletask注意/警OSTaskDelReq()將判斷用戶是否試圖刪除μC/OS中的空閑任務(wù)(Idletask/*/*errerr=.INT8UOSTaskQuery(INT8Uprio,OS_TCB無參注意/警任務(wù)控制塊(TCB)中所包含的數(shù)據(jù)成員取決于下述開關(guān)量在初始化時的設(shè)定(參見OS_CFG.H)voidTask(void =task_data.OSTCBExtPtr;/*獲取TCB擴展數(shù)據(jù)結(jié)構(gòu)的指針 status=task_data.OSTCBStat; /*獲取任務(wù)狀態(tài)INT8UOSTaskResume(INT8U所屬文調(diào)開關(guān)參OSTaskResume()的返回值為下述之一:注意/警無voidTaskX(void INT8UOSTaskStkChk(INT8Uprio,OS_STK_DATAOS_TASK_OPT_STK_CHK操作項打開。計算堆棧未用空間的方法是從堆棧底端向頂端逐個字節(jié)比較,檢查堆棧中0非0的數(shù)值出現(xiàn)。這種方法的前提是堆棧建立時已經(jīng)全部清零。要實現(xiàn)清零操作,需要在任務(wù)參注意/voidvoidTask(void{ for(;;)..if(err==OS_NO_ERR){}..}}INT8UOSTaskSuspend(INT8U所屬文調(diào)開關(guān)參注意/警errerr= voidOSTimeDly(INT16U所屬文調(diào)開關(guān)無度。延時時間的長度可從0到65535個時鐘節(jié)拍。延時時間0表示不進行延時,函數(shù)將立即返OS_TICKS_PER_SEC設(shè)定。參無注意/警{for(;;

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論