zoukankan      html  css  js  c++  java
  • UCOSII时间任务块

    转:http://blog.csdn.net/wchp314/article/details/5416476

    uCOS-II的任务控制块

    标签:  uCOS-II  2009-12-01 14:45

    任务控制块:

    任务控制块是一个结构体数据结构,用于记录各个任务的信息。当任务的CPU的使用权被剥夺时,uCOS-II用它来保存任务的当前状态。当任务重新获得CPU的使用权时,任务控制块能确保任务从当时被中断的那一点丝毫不差的继续执行。任务控制块全部存放在RAM中。

    typedef struct os_tcb {

        OS_STK          *OSTCBStkPtr;          /* 指向当前任务使用的堆栈的栈顶。uCOS-II允许每个任务堆栈的大小可以不同,这样用户可以根据实际需要定义任务堆栈的大小,可以节省RAM的空间。另外,由于OSTCBStkPtr是该结构体中的第一个变量,所以可以使用汇编语言方便的访问,因为其偏移量是0。当切换任务时,用户可以容易的知道就绪任务中优先级最高任务的栈顶。*/

    #if OS_TASK_CREATE_EXT_EN > 0u

        void            *OSTCBExtPtr;           /* 指向用户定义的扩展任务控制块*/

        OS_STK          *OSTCBStkBottom;        /*指向任务堆栈的栈底。需要考虑一下你使用的MCU的栈指针是按照从高到低还是从低到高变化的。这个变量在测试任务需要的栈空间的时候需要使用。 */

        INT32U           OSTCBStkSize;          /* 同样,该变量也是测试任务需要的栈空间需要。需要注意的是,该变量存储的是指针元的数目,而不是字节数目。*/

        INT16U           OSTCBOpt;              /* 传给函数OSTaskCreateExt()的选择项。目前有OS_TASK_OPT_STK_CHK, OS_TASK_OPT_STK_CLR, OS_TASK_OPT_SAVE_EP  */

        INT16U           OSTCBId;               /* Task ID (0..65535),目前没有使用。*/

    #endif

        struct os_tcb   *OSTCBNext;

        struct os_tcb   *OSTCBPrev;             /* 指向TCB的双向链表的前后链接,在OSTimeTick()中使用,用来刷新各任务的任务延迟变量.OSTCBDly。*/

    #if (OS_EVENT_EN) || (OS_FLAG_EN > 0u)

        OS_EVENT        *OSTCBEventPtr;         /* 指向事件控制块的指针。*/

    #endif

    #if (OS_EVENT_EN) && (OS_EVENT_MULTI_EN > 0u)

        OS_EVENT       **OSTCBEventMultiPtr;    /* 指向多重事件控制块的指针*/

    #endif

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

        void            *OSTCBMsg;              /* 指向传递给任务的消息的指针。*/

    #endif

    #if (OS_FLAG_EN > 0u) && (OS_MAX_FLAGS > 0u)

    #if OS_TASK_DEL_EN > 0u

        OS_FLAG_NODE    *OSTCBFlagNode;         /*指向事件标志的节点的指针。 */

    #endif

        OS_FLAGS         OSTCBFlagsRdy;         /* 当任务等待事件标志组时,该变量是使任务进入就绪态的事件标志。*/

    #endif

        INT32U           OSTCBDly;              /* 记录事件延时或者挂起的时间。*/

        INT8U            OSTCBStat;             /*任务状态字。比如就绪态、等待*/

        INT8U            OSTCBStatPend;         /*任务挂起状态。*/

        INT8U            OSTCBPrio;             /*任务优先级 */

        INT8U            OSTCBX;                /* 计算优先级用*/

        INT8U            OSTCBY;                /*计算优先级用*/

    #if OS_LOWEST_PRIO <= 63u

        INT8U            OSTCBBitX;             /*计算优先级用*/

        INT8U            OSTCBBitY;             /*计算优先级用*/

    #else

        INT16U           OSTCBBitX;             /*计算优先级用*/

        INT16U           OSTCBBitY;             /*计算优先级用*/

    #endif

    #if OS_TASK_DEL_EN > 0u

        INT8U            OSTCBDelReq;           /* 表示任务是否需要删除。*/

    #endif

    #if OS_TASK_PROFILE_EN > 0u

        INT32U           OSTCBCtxSwCtr;         /* 任务切换的次数。*/

        INT32U           OSTCBCyclesTot;        /* 任务运行的时钟周期数。*/

        INT32U           OSTCBCyclesStart;      /* 任务恢复开始的循环计数器。*/

        OS_STK          *OSTCBStkBase;          /* 指向任务栈开始的指针。*/

        INT32U           OSTCBStkUsed;          /*使用的栈的字节数 */

    #endif

    #if OS_TASK_NAME_EN > 0u

        INT8U           *OSTCBTaskName;

    #endif

    #if OS_TASK_REG_TBL_SIZE > 0u

        INT32U           OSTCBRegTbl[OS_TASK_REG_TBL_SIZE];

    #endif

    } OS_TCB;

     
  • 相关阅读:
    设计模式学习总结系列应用实例
    【研究课题】高校特殊学生的发现及培养机制研究
    Linux下Oracle11G RAC报错:在安装oracle软件时报file not found一例
    python pro practice
    openstack python sdk list tenants get token get servers
    openstack api
    python
    git for windows
    openstack api users list get token get servers
    linux 流量监控
  • 原文地址:https://www.cnblogs.com/Belye/p/5366343.html
Copyright © 2011-2022 走看看