任務控制塊

1、任務控制塊

typedef struct os_tcb{
    OS_STK *OSTCBStkPtr;//指向任務堆棧棧頂的指針

#if OS_TASK_CREATE_EXT_EN
    void *OSTCBExtPtr;//指向任務控制塊擴展的指針
    OS_STK *OSTCBStkBottom;//指向任務堆棧棧底的指針
    INT32U OSTCBStkSize;//任務堆棧的長度
    INT16U OSTCBOpt;//創建任務時的選擇項
    INT16U OSTCBId;//目前該區域未被使用
#endif
    struct os_tcb*OSTCBNext;//指向後一個TCB
    struct os_tcb*OSTCBPrev;//指向前一個TCB

#if(OS_Q_EN&&(OS_MAX_QS>2))||OS_MBOX_EN||OS_Sem_EN
    OS_EVENT *OSTCBEventPtr;//指向事件控制塊的指針
#endif

#if(OS_Q_EN&&(OS_MAX_QS>2))||OS_MBOX_EN
    void *OSTCBMsg;//指向傳遞給任務消息的指針
#endif

    INT16U OSTCBDly;//任務等待的時限(節拍數)
    INT8U OSTCBStat;//任務的當前狀態標誌
    INT8U OSTCBPrio;//任務的優先級
    INT8U OSTCBX;//用於快速訪問就緒表的數據
    INT8U OSTCBY;//用於快速訪問就緒表的數據
    INT8U OSTCBBitX;//用於快速訪問就緒表的數據
    INT8U OSTCBBitY;//用於快速訪問就緒表的數據

#if OS_TASK_DEL_EN
    BOOLEANOSTCBDelReq;//請求刪除任務時用到的標誌
#endif
}OS_TCB;

OSTCBStat 說明

OSTCBStat用來存放任務的當前狀態:

OS_STAT_RDY | 任務處於就緒態
OS_STAT_SEM | 任務處於等待信號量
OS_STAT_MBOX |任務處於等待消息郵箱
OS_STAT_Q | 任務處於等待消息隊列
OS_STAT_SUSPEND | 任務處於被掛起
OS_STAT_MUTEX 任務處於互斥型信號量狀態

OS_STK 說明

OS_STK在OS_CPU.H文件中定義:
typedef unsigned int OS_STK;
OS_STK就是無符號整形。OS_STK是任務堆棧的每個數據項的類型,對於不同的硬件系統是不同的,在做移植的時候就需要修改。

OSTCBPrio 說明

每個任務有唯一的優先級,因此uC/OS-II 以優先級作爲事件的標誌,作爲任務管理的主鍵。任務的優先級可以是0-63,但優先級62和63被統計任務和空閒任務佔用,用戶任務的優先級可以選擇0-61,數字越低,優先級越高。


2、任務控制塊實體

任務控制塊的實體聲明如下:
OS_TCB OSTCBTbl[OS_MAX_TASKS+OS_N_SYS_TASKS]
該代碼在ucos_ii.H 中,OS_MAX_TASKS爲最多的用戶任務數,OS_N_SYS_TASKS爲系統任務數,一般情況下爲2。因此,在內存中分配了OS_MAX_TASKS+OS_N_SYS_TASKS個任務控制塊,這些任務控制塊佔用了(OS_MAX_TASKS+OS_N_SYS_TASKS)*sizeof(OS_TCB)個內存空間。

宏OS_MAX_TASKS在OS_CFG.H中定義,OS_CFG.H是整個操作系統的配置文件。宏OS_MAX_TASKS在ucos_ii.h中定義,它的值與另一個宏OS_TASK_STAT_EN有關,代碼如下:

if OS_TASK_STAT_EN > 0
#define OS_N_SYS_TASKS  2
#else
#define OS_N_SYS_TASKS  1
#endif

OS_TASK_STAT_EN>0即表示系統具有統計任務的時候,OS_N_SYS_TASKS 值則爲2,否則爲1。OS_TASK_STAT_EN在OS_CFG.H中定義,意義爲系統是否具有統計任務,OS_TASK_STAT_EN默認值是1,表示有統計任務,如果確實不需要統計任務,可以把OS_TASK_STAT_EN值設置爲0,這是系統任務只有空閒任務,因此OS_N_SYS_TASKS的值就是1,反之,系統如果有系統任務,再加上空閒任務,那麼系統任務的數量就是2。


來源:CSDN
原文:https://blog.csdn.net/wangran1996/article/details/68069695
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章