os_tcb

燕禄
2023-12-01

struct os_tcb {
    CPU_STK             *StkPtr;                            /* 指针变量指向当前任务栈的栈顶*/
    void                *ExtPtr;                            /* 指针变量指向任务可定义的扩展区*/
    CPU_STK             *StkLimitPtr;                       /* 指针变量指向任务栈的栈深度位置*/
    OS_TCB              *NextPtr;                           /* 任务就绪表中的下一个任务控制块*/
    OS_TCB              *PrevPtr;                           /* 任务就绪表中的上一个任务控制块*/
    OS_TCB              *TickNextPtr;                        /* 正在延时后等待某个事件任务的下一个任务控制块*/
    OS_TCB              *TickPrevPtr;                        /* 正在延时后等待某个事件任务的上一个任务控制块*/
    OS_TICK_SPOKE       *TickSpokePtr;                      /* 通过该指针可以知道该任务挂在时钟节拍列表的哪个位置*/
    CPU_CHAR            *NamePtr;                           /* 给任务起名字(ASCII字符串)*/
    CPU_STK             *StkBasePtr;                        /* 任务栈的基地址*/
    OS_TASK_PTR          TaskEntryAddr;                     /* 任务函数的入口地址*/
    void                *TaskEntryArg;                      /* 任务函数的入口参数*/
    OS_PEND_DATA        *PendDataTblPtr;                    /* μC/OS允许任务挂起在任意数目的信号量或消息队列上,该指针指向任务挂起表*/
    OS_STATE             PendOn;                            /* 表示任务等待的事件类型/
    OS_STATUS            PendStatus;                        /* 表示任务等待的状态 */
    OS_STATE             TaskState;                         /* 任务当当前状态(内部状态机的8个状态之一)*/
    OS_PRIO              Prio;                              /* 任务的优先级*/
    CPU_STK_SIZE         StkSize;                           /* 任务栈的大小*/
    OS_OPT               Opt;                               /* 任务创建时的选项*/
    OS_OBJ_QTY           PendDataTblEntries;                /* 表示同时等待的事件对象的述目与PendDataTblPtr配合使用*/
    CPU_TS               TS;                                /* 时间戳*/
    OS_SEM_CTR           SemCtr;                            /* 任务内建的计数型信号量的计数值*/

                                                            /* DELAY / TIMEOUT                                        */
    OS_TICK              TickCtrPrev;                       /* 任务开始延时时的时钟值*/
    OS_TICK              TickCtrMatch;                      /* 任务开始延时时的时钟值与延时时间的总和,用来确定是否延时结束*/
    OS_TICK              TickRemain;                        /* 剩余延时时间*/
                                                            /* ... run-time by OS_StatTask()                          */
    OS_TICK              TimeQuanta;                        /*时间片轮转调度时,给任务分配的时间片(时钟节拍数)*/
    OS_TICK              TimeQuantaCtr;                        /*当前任务的时间片剩余值*/

    void                *MsgPtr;                            /* 当任务接收消息时,该指针指向消息*/
    OS_MSG_SIZE          MsgSize;                            /*表示接收消息的长度*/

    OS_MSG_Q             MsgQ;                              /* 任务内建消息队列*/
    CPU_TS               MsgQPendTime;                      /* 记录一条消息到达所花费的时间*/
    CPU_TS               MsgQPendTimeMax;                   /* 记录一条消息到达所花费的最长时间*/

    OS_REG               RegTbl[OS_CFG_TASK_REG_TBL_SIZE];  /* 每个任务的专用寄存器不同于CPU寄存器,用来存储任务专用的消息,
                                    例如:任务ID、errno信息,还可以存储在系统运行时与任务相关联的数据,数据类型必须为OS_REG */

    OS_FLAGS             FlagsPend;                         /*等待事件组标志位*/
    OS_FLAGS             FlagsRdy;                          /* 等待事件组标志位中的就绪位*/
    OS_OPT               FlagsOpt;                          /* 等待的类型*/

    OS_NESTING_CTR       SuspendCtr;                        /* 记录任务挂起的次数*/

    OS_CPU_USAGE         CPUUsage;                          /* 统计任务记录的任务CPU利用率(0.00-100.00%)*/
    OS_CPU_USAGE         CPUUsageMax;                       /* CPU Usage of task (0.00-100.00%) - Peak*/
    OS_CTX_SW_CTR        CtxSwCtr;                          /* 任务执行的频繁程度(每次调用就递增)*/
    CPU_TS               CyclesDelta;                       /* 此次执行任务所花费的时间,切换时计算value of OS_TS_GET()-.CyclesStart*/
    CPU_TS               CyclesStart;                       /*任务切换时,记录的当前任务运行开始的时间*/
    OS_CYCLES            CyclesTotal;                       /* 任务运行的总时间sum of CyclesDelta*/
    OS_CYCLES            CyclesTotalPrev;                   /* Snapshot of previous # of cycles                       */

    CPU_TS               SemPendTime;                       /* 信号量发送到接收所花费的时间OSTaskSemPost()开始计时,OSTaskSemPend()时返回*/
    CPU_TS               SemPendTimeMax;                    /* SemPendTime的最大值,即花费的最长时间*/

    CPU_STK_SIZE         StkUsed;                           /* 由OSTaskStkChk()统计的当前任务的堆栈使用字节数*/
    CPU_STK_SIZE         StkFree;                           /* 由OSTaskStkChk()统计的当前任务的堆栈未使用字节数*/

    CPU_TS               IntDisTimeMax;                     /* 最大中断关闭时间*/
    CPU_TS               SchedLockTimeMax;                  /* 锁定调度器的最长时间*/

    OS_TCB              *DbgPrevPtr;                        /* 指向OS_TCB双向链表中的前一个OS_TCB,当创建任务时,相应的TCB被插入到双向链表中*/
    OS_TCB              *DbgNextPtr;                        /* 指向OS_TCB双向链表中的后一个OS_TCB,当创建任务时,相应的TCB被插入到双向链表中*/
    CPU_CHAR            *DbgNamePtr;                        /* 当任务在等待一个时间标志组、一个信号量、一个互斥信号量或一个消息队列时,该指针指向任务所等待对象的名字*/
};
 

 类似资料:

相关阅读

相关文章

相关问答