ucosii 学习(1)--任务控制块

UCOSII的任务控制块还是比较简单的,

任务控制块中有下面这些东西

堆栈指针;//用来存储任务切换时用于寄存器的值保存的内存的空间

下一个控制块指针;//这两个指针其是为了形成空闲任务控制块链表,和已在使用的控制块链表,

上一个控制块指针;//可以看出这是一个双向链表,暂时还不知道为什么弄双向的.

事件控制块指针;//信号量,消息邮箱,消息队列,互斥信号量都是用这个东西来描述的,只不过

//里面事件类型不同,用到的几个成员变量也不容而以.下面会介绍到信号量集

//这个就不适用事件控制块来描述.

消息指针;//用来指定当接收到得消息邮箱和消息队列的事件指针

标志组;//现在看来,其实是为了实现信号量集而添加的,因为时间控制块不能表示一组信号量了,所以用

//一个新的数据结构来表示

等待时间;//这个就是任务还剩多少时间才可运行,当调用OSTimeDly或者OSTimeDlyHMSM后

//这个变量开始起作用,没发生一次时钟中断,计数就减1,一直减到0,

任务状态;//任务的状态:睡眠,就绪,运行,等待,中断服务这几个状态中的一个

任务的优先级;//任务的优先级,即用来表示任务的优先运行的级别,又用来表示本任务的任务控制块指针

//在任务控制块数组中的下标

OSTCBX  OSTCBY  OSTCBBitX  OSTCBBitY  ;;;;这四个数据用来快速的在任务就绪表登记或注销自己

删除自己的标识;//如果任务删除自己,则给该标志置位.

typedef struct os_tcb {

    OS_STK        *OSTCBStkPtr;        /* Pointer to current top of stack                              */

 

#if OS_TASK_CREATE_EXT_EN > 0

    void          *OSTCBExtPtr;        /* Pointer to user definable data for TCB extension             */

    OS_STK        *OSTCBStkBottom;     /* Pointer to bottom of stack                                   */

    INT32U         OSTCBStkSize;       /* Size of task stack (in number of stack elements)             */

    INT16U         OSTCBOpt;           /* Task options as passed by OSTaskCreateExt()                  */

    INT16U         OSTCBId;            /* Task ID (0..65535)                                           */

#endif

 

    struct os_tcb *OSTCBNext;          /* Pointer to next     TCB in the TCB list                      */

    struct os_tcb *OSTCBPrev;          /* Pointer to previous TCB in the TCB list                      */

 

#if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0) || (OS_SEM_EN > 0) || (OS_MUTEX_EN > 0)

    OS_EVENT      *OSTCBEventPtr;      /* Pointer to event control block                               */

#endif

 

#if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0)

    void          *OSTCBMsg;           /* Message received from OSMboxPost() or OSQPost()              */

#endif

 

#if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)

#if OS_TASK_DEL_EN > 0

    OS_FLAG_NODE  *OSTCBFlagNode;      /* Pointer to event flag node                                   */

#endif    

    OS_FLAGS       OSTCBFlagsRdy;      /* Event flags that made task ready to run                      */

#endif

 

    INT16U         OSTCBDly;           /* Nbr ticks to delay task or, timeout waiting for event        */

    INT8U          OSTCBStat;          /* Task status                                                  */

    INT8U          OSTCBPrio;          /* Task priority (0 == highest, 63 == lowest)                   */

 

    INT8U          OSTCBX;             /* Bit position in group  corresponding to task priority (0..7) */

    INT8U          OSTCBY;             /* Index into ready table corresponding to task priority        */

    INT8U          OSTCBBitX;          /* Bit mask to access bit position in ready table               */

    INT8U          OSTCBBitY;          /* Bit mask to access bit position in ready group               */

 

#if OS_TASK_DEL_EN > 0

    BOOLEAN        OSTCBDelReq;        /* Indicates whether a task needs to delete itself              */

#endif

} OS_TCB

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值