嵌入式操作系統(tǒng)教程第四章課件_第1頁
嵌入式操作系統(tǒng)教程第四章課件_第2頁
嵌入式操作系統(tǒng)教程第四章課件_第3頁
嵌入式操作系統(tǒng)教程第四章課件_第4頁
嵌入式操作系統(tǒng)教程第四章課件_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第四章嵌入式實(shí)時(shí)操作系統(tǒng)

uC/OS-II及其任務(wù)uC/OS-II概述uC/OS-II的任務(wù)uC/OS-II任務(wù)的存儲結(jié)構(gòu)uC/OS-II任務(wù)的狀態(tài)任務(wù)的優(yōu)先級別任務(wù)控制塊任務(wù)堆棧系統(tǒng)任務(wù)臨界區(qū)1第四章嵌入式實(shí)時(shí)操作系統(tǒng)

第四章嵌入式實(shí)時(shí)操作系統(tǒng)

uC/OS-II及其任務(wù)一、uC/OS-II的特點(diǎn)§4.1uC/OS-II概述2

第四章嵌入式實(shí)時(shí)操作系統(tǒng)

uC/OS-II及其任務(wù)一、u二、uC/OS-II的文件結(jié)構(gòu)1.幾個(gè)應(yīng)用程序相關(guān)頭文件(1)includes.h#include<stdio.h>#include<string.h>#include<ctype.h> #include<stdl.h>#include<conio.h>#include<dos.h>#include<setjmp.h>/*與應(yīng)用程序相關(guān)*/#include“\software\ucosii\ix86\bc31\os_cpu.h”#include“os_cfg.h”#include“software\uscos-ii\source\ucos_ii.h”#include“software\blocks\pc\bc31\pc.h”由具體應(yīng)用環(huán)境決定3二、uC/OS-II的文件結(jié)構(gòu)1.幾個(gè)應(yīng)用程序相關(guān)頭文件(1(2)os_cfg.h#defineOS_MAX_EVENTS2//事件總數(shù)#defineOS_MAX_FLAGS5//信號量集總數(shù)#defineOS_MAX_MEM_PART5 //內(nèi)存塊數(shù)量#defineOS_MAX_QS2//消息隊(duì)列數(shù)量#defineOS_MAX_TASKS50//任務(wù)數(shù)量#defineOS_LOWEST_PRIO52//用戶任務(wù)數(shù)量#defineOS_TASK_IDLE_STK_SIZE512//空閑任務(wù)堆棧長度……#defineOS_TASK_CHANGE_PRIO_EN1//優(yōu)先級修改功能可用#defineOS_TASK_CREATE_ENABLE1//任務(wù)創(chuàng)建功能可用……系統(tǒng)裁剪性的實(shí)現(xiàn):#ifOS_TASK_CREATE_EXE_EN……//用戶可代碼#endif 4(2)os_cfg.h#defineOS_MAX_EVE2.幾個(gè)系統(tǒng)硬件相關(guān)頭文件(1)os_cpu.hTypedefunsignedcharBOOLEAN; TypedefunsignedcharINT8U;TypedefsignedcharINT8S; TypedefunsignedintINT16U;TypedefsignedintINT16S;TypedefunsignedlongINT32U;TypedefsignedlongINT32U;TypedeffloatFP32;TypedefdoubleFP64;TypedefunsignedintOS_STK;TypedefunsignedshortOS_CPU_SR;#defineBYTEINT8S#defineUBYTEINT8U#defineWORDINT16S#defineUWORDINT16U#defineLONGINT32S#defineULONGINT32U52.幾個(gè)系統(tǒng)硬件相關(guān)頭文件(1)os_cpu.hTypede#defineOS_CRITICAL_METHOD2#ifOS_CRITICAL_METHOD==1#defineOS_ENTER_CRITICAL()asmCLI#defineOS_EXIT_CRITICAL()asmSTI#endif#ifOS_CRITICAL_METHOD==2#defineOS_ENTER_CRITICAL()asm(PUSHF;CLI)#defineOS_EXIT_CRITICAL()asmPOPF#endif#ifOS_CRITICAL_METHOD==3#defineOS_ENTER_CRITICAL()(cpu_sr=OSCPUSaveSR())#defineOS_EXIT_CRITICAL()(OSCPURestoreSR(cpu_sr))#endif與系統(tǒng)處理器相關(guān)的宏定義:6#defineOS_CRITICAL_METHOD23.內(nèi)核相關(guān)文件三、uC/OS-II的裁剪性typedefstructos_tcb{OS_STK*OSTCBStkPtr;#ifOS_TASK_CREATE_EXT_ENvoid*OSTCBExtPtr;OS_STK*OSTCBStkBottom;INT32UOSTCBStkSize;INT16UOSTCBOpt;INT16UOSTCBId;#endif……#if(OS_Q_EN&&(OS_MAX_QS>=2))||OS_MBOX_EN||OS_SEM_ENOS_EVENT*OSTCBEventPtr;#endif#if(OS_Q_EN&&(OS_MAX_QS>=2))||OS_MBOX_ENvoid*OSTCBMsg;#endif……#ifOS_TASK_DEL_ENBOOLEANOSTCBDelReq;#endif}OS_TCB;由cfg.h設(shè)定編譯與否(值為1)由cfg.h設(shè)定編譯與否(值為0)73.內(nèi)核相關(guān)文件三、uC/OS-II的裁剪性typedef§4.2uC/OS-II任務(wù)1.任務(wù)的統(tǒng)一性與獨(dú)立性——總?cè)蝿?wù)與分任務(wù)任務(wù)就是一個(gè)無限循環(huán)的C函數(shù)voidYourTask(void*pdata) (1){for(;;){ (2)/*用戶代碼*/調(diào)用uC/OS-II的某種系統(tǒng)服務(wù):OSMboxPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);OSTimeDly();OSTimeDlyHMSM();/*用戶代碼*/}}8§4.2uC/OS-II任務(wù)1.任務(wù)的統(tǒng)一性與獨(dú)立性——2.嵌入式實(shí)時(shí)操作系統(tǒng)對任務(wù)的響應(yīng)異步事件;

周期性事件;

同時(shí)具有異步和周期特性的時(shí)間;92.嵌入式實(shí)時(shí)操作系統(tǒng)對任務(wù)的響應(yīng)異步事件;

周期性事件;

§4.3uC/OS-II任務(wù)的存儲結(jié)構(gòu)任務(wù)控制塊:保存任務(wù)屬性信息。任務(wù)堆棧:保存任務(wù)的工作環(huán)境。任務(wù)程序代碼:任務(wù)執(zhí)行的實(shí)體。10§4.3uC/OS-II任務(wù)的存儲結(jié)構(gòu)任務(wù)控制塊:保存任為了便于管理,相應(yīng)的任務(wù)控制塊彼此通過自己的指針彼此連接形成一個(gè)鏈表。11為了便于管理,相應(yīng)的任務(wù)控制塊彼此通過自己的指針彼§4.4uC/OS-II任務(wù)狀態(tài)12§4.4uC/OS-II任務(wù)狀態(tài)12睡眠態(tài)(DORMANT):指任務(wù)駐留在程序空間之中,還沒有交給μC/OS-Ⅱ管理。就緒態(tài)

:通過調(diào)用兩個(gè)函數(shù)之一:OSTaskCreate()或OSTaskCreateExt()來建立任務(wù),一旦建立任務(wù)就進(jìn)入就緒態(tài)準(zhǔn)備運(yùn)行。運(yùn)行態(tài):調(diào)用OSStart()函數(shù)可以啟動(dòng)任務(wù),即任務(wù)投入運(yùn)行,它總是啟動(dòng)擁有最高優(yōu)先級的任務(wù)

等待態(tài):正在運(yùn)行的任務(wù)需要延遲一段時(shí)間或等待某事件的發(fā)生,它將放棄讓出處理器進(jìn)入等待狀態(tài)。中斷態(tài):正在運(yùn)行的任務(wù)是可以被中斷的,除非該任務(wù)將中斷關(guān)了,或者μC/OS-Ⅱ?qū)⒅袛嚓P(guān)了。被中斷的任務(wù)就進(jìn)入了中斷服務(wù)態(tài)(ISR)。

13睡眠態(tài)(DORMANT):指任務(wù)駐留在程序空間之中,還沒有交§4.5uC/OS-II任務(wù)優(yōu)先級uC/OS-II為硬實(shí)時(shí)可剝奪型內(nèi)核任務(wù)數(shù)量一定,且擁有全系統(tǒng)唯一優(yōu)先級——OS_LOWEST_PRIOuC/OS系統(tǒng)都系統(tǒng)中最低優(yōu)先級任務(wù)默認(rèn)

14§4.5uC/OS-II任務(wù)優(yōu)先級uC/OS-II為硬實(shí)§4.6任務(wù)優(yōu)控制塊(TCB)typedefstructos_tcb{

OS_STK *OSTCBStkPtr; //指向任務(wù)堆棧棧頂?shù)闹羔?ifOS_TASK_CREATE_EXT_ENvoid *OSTCBExtPtr; //指向任務(wù)控制塊擴(kuò)展的指針OS_STK *OSTCBStkBottom; //指向任務(wù)堆棧棧底的指針I(yè)NT32U OSTCBStkSize; //任務(wù)堆棧的長度INT16U OSTCBOpt; //創(chuàng)建任務(wù)時(shí)的選擇項(xiàng)INT16U OSTCBId; //目前,該域未被使用#endif

structos_tcb *OSTCBNext;//指向后一個(gè)任務(wù)控制塊的指針

structos_tcb *OSTCBPrev;//指向前一個(gè)任務(wù)控制塊的指針#if(OS_Q_EN&&(OS_MAX_QS>=2))||OS_MBOX_EN||OS_Sem_ENOS_EVENT *OSTCBEventPtr; //指向事件控制塊的指針#endif1.任務(wù)控制塊結(jié)構(gòu)定義15§4.6任務(wù)優(yōu)控制塊(TCB)typedefstruc#if(OS_Q_EN&&(OS_MAX_QS>=2))||OS_MBOX_ENvoid *OSTCBMsg; //指向傳遞給任務(wù)消息的指針#endif

INT16U OSTCBDly; //任務(wù)等待的時(shí)限(節(jié)拍數(shù))

INT8UOSTCBStat; //任務(wù)的當(dāng)前狀態(tài)標(biāo)志

INT8U OSTCBPrio; //任務(wù)的優(yōu)先級別INT8U OSTCBX; //用于快速訪問就緒表的數(shù)據(jù)INT8U OSTCBY; //用于快速訪問就緒表的數(shù)據(jù)INT8UOSTCBBitX; //用于快速訪問就緒表的數(shù)據(jù)INT8UOSTCBBitY; //用于快速訪問就緒表的數(shù)據(jù)

#ifOS_TASK_DEL_ENBOOLEAN OSTCBDelReq; //請求刪除任務(wù)時(shí)用到的標(biāo)志#endif}OS_TCB;等到中斷到來減1值說明OS_STAT_RDY表示任務(wù)處于就緒狀態(tài)OS_STAT_SEM表示任務(wù)處于等待信號量狀態(tài)OS_STAT_MBOX表示任務(wù)處于等待消息郵箱狀態(tài)OS_STAT_Q表示任務(wù)處于等待消息隊(duì)列狀態(tài)OS_STAT_SUSPEND表示任務(wù)處于被掛起狀態(tài)OS_STAT_MUTEX表示任務(wù)處于等待互斥型信號量狀態(tài)16#if(OS_Q_EN&&(OS_MAX_QS>=2.空閑任務(wù)塊鏈表(空)任務(wù)塊數(shù)量:系統(tǒng)初始化時(shí)建立,數(shù)量由os_cfg.h中參數(shù)OS_MAX_TASKS+OS_N_SYS_TASKS決定.

任務(wù)數(shù):文件UCOS_II.H中的常數(shù)OS_N_SYS_TASKS它指明了系統(tǒng)任務(wù)的數(shù)目。172.空閑任務(wù)塊鏈表(空)任務(wù)塊數(shù)量:系統(tǒng)初始化時(shí)建立,數(shù)量3.任務(wù)鏈表的建立任務(wù)創(chuàng)建函數(shù):OSTaskCreate()或OSTaskCreateExt()任務(wù)搜索數(shù)組:OSTCBTb[],按優(yōu)先級順序存放任務(wù)控制塊指針。全局變量:OSTCBCur,存放當(dāng)前占用處理器資源的任務(wù)任務(wù)刪除函數(shù):OSTaskDel(),任務(wù)刪除的實(shí)質(zhì)就是資源的回收。183.任務(wù)鏈表的建立任務(wù)創(chuàng)建函數(shù):OSTaskCreate(1919§4.7任務(wù)堆棧堆棧:按“先進(jìn)進(jìn)出(FIFO)”順序組織的存儲空間。堆棧創(chuàng)建一、任務(wù)堆棧的創(chuàng)建staticOS_STKMyTaskStack[stack_size];OROS_STKMyTaskStack[stack_size];{OS_STK*pstk;pstk=(OS_STK*)malloc(stack_size);if(pstk!=(OS_STK*)0){/*確認(rèn)malloc()能得到足夠地內(nèi)存空間*/INTU8UOSTaskCreate(void*pdata);}}20§4.7任務(wù)堆棧堆棧:按“先進(jìn)進(jìn)出(FIFO)”順序組織任務(wù)創(chuàng)建

INT8UOSTaskCreate(void(*task)(void*pd),void*pdata.OS_STK*ptos,INT8Uprio);21任務(wù)創(chuàng)建21二、任務(wù)堆棧的初始化

處理器啟動(dòng)任務(wù)時(shí),寄存器需要預(yù)置一些與待運(yùn)行任務(wù)相關(guān)的初始數(shù)據(jù)的,決定了新任務(wù)建立,其與處理器寄存器有關(guān)的內(nèi)容必須先預(yù)存在其私有堆棧中。

堆棧初始化函數(shù)

OS_STK*OSTaskStkInit(

void(*task)(void*pd),

void*pdato.

OS_STK*ptos,

INT8Uopt

);22二、任務(wù)堆棧的初始化處理器啟動(dòng)任務(wù)時(shí),寄存器需要預(yù)置§4.8系統(tǒng)任務(wù)空閑任務(wù):多任務(wù)系統(tǒng)中,系統(tǒng)為了保持正常的運(yùn)算,在某個(gè)無用戶任務(wù)運(yùn)行的時(shí)間段運(yùn)行的一個(gè)系統(tǒng)自建任務(wù).

voidOSTaskIdle(void*pdata){#ifOS_CRITICAL_METHOD==3OS_CPU_SRcpu_sr;#endifpdata=pdata;for(;;){OS_ENTER_CRITICAL();OSdleCtr++;OS_EXIT_CRITICAL();}}

臨界區(qū)23§4.8系統(tǒng)任務(wù)空閑任務(wù):多任務(wù)系統(tǒng)中,系統(tǒng)為了保持正常統(tǒng)計(jì)任務(wù):用來記錄處理器使用情況,有系統(tǒng)自身建立的任務(wù)。臨界區(qū):系統(tǒng)中,某些代碼執(zhí)行過程中不允許中斷其執(zhí)行,這段代碼執(zhí)行時(shí)形成的上下文環(huán)境成為臨界區(qū)。24統(tǒng)計(jì)任務(wù):用來記錄處理器使用情況,有系統(tǒng)自身建立的任務(wù)。242525

第四章嵌入式實(shí)時(shí)操作系統(tǒng)

uC/OS-II及其任務(wù)uC/OS-II概述uC/OS-II的任務(wù)uC/OS-II任務(wù)的存儲結(jié)構(gòu)uC/OS-II任務(wù)的狀態(tài)任務(wù)的優(yōu)先級別任務(wù)控制塊任務(wù)堆棧系統(tǒng)任務(wù)臨界區(qū)26第四章嵌入式實(shí)時(shí)操作系統(tǒng)

第四章嵌入式實(shí)時(shí)操作系統(tǒng)

uC/OS-II及其任務(wù)一、uC/OS-II的特點(diǎn)§4.1uC/OS-II概述27

第四章嵌入式實(shí)時(shí)操作系統(tǒng)

uC/OS-II及其任務(wù)一、u二、uC/OS-II的文件結(jié)構(gòu)1.幾個(gè)應(yīng)用程序相關(guān)頭文件(1)includes.h#include<stdio.h>#include<string.h>#include<ctype.h> #include<stdl.h>#include<conio.h>#include<dos.h>#include<setjmp.h>/*與應(yīng)用程序相關(guān)*/#include“\software\ucosii\ix86\bc31\os_cpu.h”#include“os_cfg.h”#include“software\uscos-ii\source\ucos_ii.h”#include“software\blocks\pc\bc31\pc.h”由具體應(yīng)用環(huán)境決定28二、uC/OS-II的文件結(jié)構(gòu)1.幾個(gè)應(yīng)用程序相關(guān)頭文件(1(2)os_cfg.h#defineOS_MAX_EVENTS2//事件總數(shù)#defineOS_MAX_FLAGS5//信號量集總數(shù)#defineOS_MAX_MEM_PART5 //內(nèi)存塊數(shù)量#defineOS_MAX_QS2//消息隊(duì)列數(shù)量#defineOS_MAX_TASKS50//任務(wù)數(shù)量#defineOS_LOWEST_PRIO52//用戶任務(wù)數(shù)量#defineOS_TASK_IDLE_STK_SIZE512//空閑任務(wù)堆棧長度……#defineOS_TASK_CHANGE_PRIO_EN1//優(yōu)先級修改功能可用#defineOS_TASK_CREATE_ENABLE1//任務(wù)創(chuàng)建功能可用……系統(tǒng)裁剪性的實(shí)現(xiàn):#ifOS_TASK_CREATE_EXE_EN……//用戶可代碼#endif 29(2)os_cfg.h#defineOS_MAX_EVE2.幾個(gè)系統(tǒng)硬件相關(guān)頭文件(1)os_cpu.hTypedefunsignedcharBOOLEAN; TypedefunsignedcharINT8U;TypedefsignedcharINT8S; TypedefunsignedintINT16U;TypedefsignedintINT16S;TypedefunsignedlongINT32U;TypedefsignedlongINT32U;TypedeffloatFP32;TypedefdoubleFP64;TypedefunsignedintOS_STK;TypedefunsignedshortOS_CPU_SR;#defineBYTEINT8S#defineUBYTEINT8U#defineWORDINT16S#defineUWORDINT16U#defineLONGINT32S#defineULONGINT32U302.幾個(gè)系統(tǒng)硬件相關(guān)頭文件(1)os_cpu.hTypede#defineOS_CRITICAL_METHOD2#ifOS_CRITICAL_METHOD==1#defineOS_ENTER_CRITICAL()asmCLI#defineOS_EXIT_CRITICAL()asmSTI#endif#ifOS_CRITICAL_METHOD==2#defineOS_ENTER_CRITICAL()asm(PUSHF;CLI)#defineOS_EXIT_CRITICAL()asmPOPF#endif#ifOS_CRITICAL_METHOD==3#defineOS_ENTER_CRITICAL()(cpu_sr=OSCPUSaveSR())#defineOS_EXIT_CRITICAL()(OSCPURestoreSR(cpu_sr))#endif與系統(tǒng)處理器相關(guān)的宏定義:31#defineOS_CRITICAL_METHOD23.內(nèi)核相關(guān)文件三、uC/OS-II的裁剪性typedefstructos_tcb{OS_STK*OSTCBStkPtr;#ifOS_TASK_CREATE_EXT_ENvoid*OSTCBExtPtr;OS_STK*OSTCBStkBottom;INT32UOSTCBStkSize;INT16UOSTCBOpt;INT16UOSTCBId;#endif……#if(OS_Q_EN&&(OS_MAX_QS>=2))||OS_MBOX_EN||OS_SEM_ENOS_EVENT*OSTCBEventPtr;#endif#if(OS_Q_EN&&(OS_MAX_QS>=2))||OS_MBOX_ENvoid*OSTCBMsg;#endif……#ifOS_TASK_DEL_ENBOOLEANOSTCBDelReq;#endif}OS_TCB;由cfg.h設(shè)定編譯與否(值為1)由cfg.h設(shè)定編譯與否(值為0)323.內(nèi)核相關(guān)文件三、uC/OS-II的裁剪性typedef§4.2uC/OS-II任務(wù)1.任務(wù)的統(tǒng)一性與獨(dú)立性——總?cè)蝿?wù)與分任務(wù)任務(wù)就是一個(gè)無限循環(huán)的C函數(shù)voidYourTask(void*pdata) (1){for(;;){ (2)/*用戶代碼*/調(diào)用uC/OS-II的某種系統(tǒng)服務(wù):OSMboxPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);OSTimeDly();OSTimeDlyHMSM();/*用戶代碼*/}}33§4.2uC/OS-II任務(wù)1.任務(wù)的統(tǒng)一性與獨(dú)立性——2.嵌入式實(shí)時(shí)操作系統(tǒng)對任務(wù)的響應(yīng)異步事件;

周期性事件;

同時(shí)具有異步和周期特性的時(shí)間;342.嵌入式實(shí)時(shí)操作系統(tǒng)對任務(wù)的響應(yīng)異步事件;

周期性事件;

§4.3uC/OS-II任務(wù)的存儲結(jié)構(gòu)任務(wù)控制塊:保存任務(wù)屬性信息。任務(wù)堆棧:保存任務(wù)的工作環(huán)境。任務(wù)程序代碼:任務(wù)執(zhí)行的實(shí)體。35§4.3uC/OS-II任務(wù)的存儲結(jié)構(gòu)任務(wù)控制塊:保存任為了便于管理,相應(yīng)的任務(wù)控制塊彼此通過自己的指針彼此連接形成一個(gè)鏈表。36為了便于管理,相應(yīng)的任務(wù)控制塊彼此通過自己的指針彼§4.4uC/OS-II任務(wù)狀態(tài)37§4.4uC/OS-II任務(wù)狀態(tài)12睡眠態(tài)(DORMANT):指任務(wù)駐留在程序空間之中,還沒有交給μC/OS-Ⅱ管理。就緒態(tài)

:通過調(diào)用兩個(gè)函數(shù)之一:OSTaskCreate()或OSTaskCreateExt()來建立任務(wù),一旦建立任務(wù)就進(jìn)入就緒態(tài)準(zhǔn)備運(yùn)行。運(yùn)行態(tài):調(diào)用OSStart()函數(shù)可以啟動(dòng)任務(wù),即任務(wù)投入運(yùn)行,它總是啟動(dòng)擁有最高優(yōu)先級的任務(wù)

等待態(tài):正在運(yùn)行的任務(wù)需要延遲一段時(shí)間或等待某事件的發(fā)生,它將放棄讓出處理器進(jìn)入等待狀態(tài)。中斷態(tài):正在運(yùn)行的任務(wù)是可以被中斷的,除非該任務(wù)將中斷關(guān)了,或者μC/OS-Ⅱ?qū)⒅袛嚓P(guān)了。被中斷的任務(wù)就進(jìn)入了中斷服務(wù)態(tài)(ISR)。

38睡眠態(tài)(DORMANT):指任務(wù)駐留在程序空間之中,還沒有交§4.5uC/OS-II任務(wù)優(yōu)先級uC/OS-II為硬實(shí)時(shí)可剝奪型內(nèi)核任務(wù)數(shù)量一定,且擁有全系統(tǒng)唯一優(yōu)先級——OS_LOWEST_PRIOuC/OS系統(tǒng)都系統(tǒng)中最低優(yōu)先級任務(wù)默認(rèn)

39§4.5uC/OS-II任務(wù)優(yōu)先級uC/OS-II為硬實(shí)§4.6任務(wù)優(yōu)控制塊(TCB)typedefstructos_tcb{

OS_STK *OSTCBStkPtr; //指向任務(wù)堆棧棧頂?shù)闹羔?ifOS_TASK_CREATE_EXT_ENvoid *OSTCBExtPtr; //指向任務(wù)控制塊擴(kuò)展的指針OS_STK *OSTCBStkBottom; //指向任務(wù)堆棧棧底的指針I(yè)NT32U OSTCBStkSize; //任務(wù)堆棧的長度INT16U OSTCBOpt; //創(chuàng)建任務(wù)時(shí)的選擇項(xiàng)INT16U OSTCBId; //目前,該域未被使用#endif

structos_tcb *OSTCBNext;//指向后一個(gè)任務(wù)控制塊的指針

structos_tcb *OSTCBPrev;//指向前一個(gè)任務(wù)控制塊的指針#if(OS_Q_EN&&(OS_MAX_QS>=2))||OS_MBOX_EN||OS_Sem_ENOS_EVENT *OSTCBEventPtr; //指向事件控制塊的指針#endif1.任務(wù)控制塊結(jié)構(gòu)定義40§4.6任務(wù)優(yōu)控制塊(TCB)typedefstruc#if(OS_Q_EN&&(OS_MAX_QS>=2))||OS_MBOX_ENvoid *OSTCBMsg; //指向傳遞給任務(wù)消息的指針#endif

INT16U OSTCBDly; //任務(wù)等待的時(shí)限(節(jié)拍數(shù))

INT8UOSTCBStat; //任務(wù)的當(dāng)前狀態(tài)標(biāo)志

INT8U OSTCBPrio; //任務(wù)的優(yōu)先級別INT8U OSTCBX; //用于快速訪問就緒表的數(shù)據(jù)INT8U OSTCBY; //用于快速訪問就緒表的數(shù)據(jù)INT8UOSTCBBitX; //用于快速訪問就緒表的數(shù)據(jù)INT8UOSTCBBitY; //用于快速訪問就緒表的數(shù)據(jù)

#ifOS_TASK_DEL_ENBOOLEAN OSTCBDelReq; //請求刪除任務(wù)時(shí)用到的標(biāo)志#endif}OS_TCB;等到中斷到來減1值說明OS_STAT_RDY表示任務(wù)處于就緒狀態(tài)OS_STAT_SEM表示任務(wù)處于等待信號量狀態(tài)OS_STAT_MBOX表示任務(wù)處于等待消息郵箱狀態(tài)OS_STAT_Q表示任務(wù)處于等待消息隊(duì)列狀態(tài)OS_STAT_SUSPEND表示任務(wù)處于被掛起狀態(tài)OS_STAT_MUTEX表示任務(wù)處于等待互斥型信號量狀態(tài)41#if(OS_Q_EN&&(OS_MAX_QS>=2.空閑任務(wù)塊鏈表(空)任務(wù)塊數(shù)量:系統(tǒng)初始化時(shí)建立,數(shù)量由os_cfg.h中參數(shù)OS_MAX_TASKS+OS_N_SYS_TASKS決定.

任務(wù)數(shù):文件UCOS_II.H中的常數(shù)OS_N_SYS_TASKS它指明了系統(tǒng)任務(wù)的數(shù)目。422.空閑任務(wù)塊鏈表(空)任務(wù)塊數(shù)量:系統(tǒng)初始化時(shí)建立,數(shù)量3.任務(wù)鏈表的建立任務(wù)創(chuàng)建函數(shù):OSTaskCreate()或OSTaskCreateExt()任務(wù)搜索數(shù)組:OSTCBTb[],按優(yōu)先級順序存放任務(wù)控制塊指針。全局變量:OSTCBCur,存放當(dāng)前占用處理器資源的任務(wù)任務(wù)刪除函數(shù):OSTaskDel(),任務(wù)刪除的實(shí)質(zhì)就是資源的回收。433.任務(wù)鏈表的建立任務(wù)創(chuàng)建函數(shù):OSTaskCreate(4419§4.7任務(wù)堆棧堆棧:按“先進(jìn)進(jìn)出(FIFO)”順序組織的存儲空間。堆棧創(chuàng)建一、任務(wù)堆棧的創(chuàng)建staticOS_STKMyTaskStack[stack_size];OROS_STKMyTaskStack[stack_size];{OS_STK*pstk;pstk=(OS_STK*)malloc(stack_size)

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論