嵌入式實時操作系統(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ù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

溫馨提示

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

評論

0/150

提交評論