首页 技术 正文
技术 2022年11月15日
0 收藏 632 点赞 3,388 浏览 2683 个字

转: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;

 

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,128
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,600
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,443
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,216
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,851
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,939