任务控制块

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
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/weixin_41536025/article/details/89360841