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

 

UCOSII时间任务块的更多相关文章

  1. uC/OS-II时间(OS_time)块

    /*************************************************************************************************** ...

  2. png文件格式详解,获取文件的修改时间,创作时间

    http://dev.gameres.com/Program/Visual/Other/PNGFormat.htmhttp://www.360doc.com/content/11/0428/12/10 ...

  3. vsCode与Hubilder中自定义代码块

    平常测试vue的一些属性时总要新增代码,引入文件,麻烦,顾自定义代码块来实现快速新增测试 一.打开设置 1.1 vsCode设置 点击后选择代码块所属的文件类型,比如在html中则选择html类型配置 ...

  4. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  5. 初次了解的Java多线程

    0.1熟悉多线程 多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能 ...

  6. I/O优化篇

    转载:http://blog.csdn.net/gzh0222/article/details/9227393 很不错 1.系统学习 IO性能对于一个系统的影响是至关重要的.一个系统经过多项优化以后, ...

  7. Hadoop Fsimage 和 editlog

    在<Hadoop NameNode元数据相关文件目录解析>文章中提到NameNode的$dfs.namenode.name.dir/current/文件夹的几个文件: 1 current/ ...

  8. Hadoop学习(2)-- HDFS

    随着信息技术的高度发展,数据量越来越多,当一个操作系统管辖范围存储不下时,只能将数据分配到更多的磁盘中存储,但是数据分散在多台磁盘上非常不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,因此诞 ...

  9. C++中关于new及内存地址的思考

    OJ题刷多了,每次都是直接分配内存,那么,你还记得怎么动态分配内存吗? ———————————————————————————————————— 我们知道,使用malloc/calloc等分配内存的函 ...

随机推荐

  1. IOS开发-UI学习-UIPageControl(页码控制器)的使用

    UIPageControl即页码控制器,是在翻动图片阅览时下面显示的几个小点,属性设置如下: UIPageControl *pagecontrol = [[UIPageControl alloc]in ...

  2. 【java基础】内部类,局部内部类,匿名内部类、静态内部类、接口中的内部类

    内部类: 1.定义在一个类中的内部类,内部类的实例化伴随着外围类所定义的方法来构造,内部类对象有外围类的隐式引用,所以内部类可以直接访问外围类的外围类的域,包括私有的,这是内部类的访问特权,所以比常规 ...

  3. UVa 750 - 8 Queens Chess Problem

    题目大意:八皇后问题,在一个8*8的棋盘上,放置8个皇后,使得任意两个皇后不在同一行上.不在同一列上.不在同一条对角线上,不过这道题预先给定了一个位置放置一个皇后,让你输出所有可能的答案. 经典的回溯 ...

  4. SQL四种语言

    1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema ...

  5. 电商网站垮IDC数据备份,MySql主从同步,图片及其它数据文件的同步

    原文网址:http://www.bzfshop.net/article/180.html 对一个电子商务网站而言,最宝贵的资源就是数据.服务器是很廉价的东西,即使烧了好几个也问题不大,但是用户数据如果 ...

  6. 2.7. 属性的各种设置选项(Core Data 应用程序实践指南)

    可供配置的选项根据属性类型的不同有所变化,并不是每一种属性都能配置下列选项 Transient:勾选该选项,表示该属性不写入“持久化存储区”,这听起来很奇怪,但有时候,只需要把特性留在托管对象上下文就 ...

  7. Linux目录结构示意详解图

  8. systemd的命令systemctl set-property testSpeed CPUQuota=10%

    总结 systemd 的资源限制一般要写到unit文件中,但是,现在测试发现会有 被值被覆盖的现象:经过排查发现是,没有 使用systemd的接口,凡是使用echo "" > ...

  9. CentOS6.5+mysql5.1源码安装过程

    一:先安装依赖包(不然配置的时候会报错的!) yum -y install ncurses* libtermcap* gcc-c++* 新建mysql用户 [root@HE1Packages]# gr ...

  10. Java Swing JScrollPane 设置滚动量

    JScrollPane.getVerticalScrollBar().setUnitIncrement(20); 参考:http://bbs.csdn.net/topics/320249228