任务控制块 TCB
1.任务控制块是被uC/OS-III用于维护任务的一个结构体。每个任务都必须有自己的 TCB。 uC/OS-III 在 RAM 中分配 TCB。当调用uC/OS-III提供的与任务相关的函数(以OSTask???()形式命名)时,任务的TCB地址需会被提供给该函数。 TCB的结构定义于OS.H中,如列表 5-3所示(在 OS.H中代码是有注释的)。 TCB中的一些变量可以根据具体应用进行裁剪。
2.用户程序不应该访问这些变量(尤其不能更改它们)。换句话说,TCB中的变量只能被uC/OS-III访问。


.StrPtr:这个变量中包含了指向当前任务堆栈的指针。
.ExtPtr:这个变量中定义了指向用户用于扩展TCB(如果需要)
的指针。
.StkLimitPtr:这个变量中保存了堆栈增长时的限制地址,它是在调用OSTaskCreate()时传递的参数”stk_limit”。 有些处理器有硬件寄存器可以自动地检测并确保堆栈不发生溢出,如果处理器没有这些硬件设施, 堆栈检测可以用软件模拟。 然而, 软件模拟不如硬件可靠。 如果这个功能没有被用到,那么在调用 OSTaskCreate()时可以设置”stk_limit”为0。详见5-3。

.NextPtr和.PrevPtr:这些指针用于就绪队列中双向链表。双向链表可以让TCB在列表中能更快地被插入或者删除。
.TickNextPtr和.TickPrevPtr:这些指针用于挂起队列中双向链表。双向链表可以让TCB在列表中能更快地被插入或者删除。
.TickSpokePtr:这个指针用于表示时基轮转的轮辐。
.NamePtr:这个指针存放了任务的名字。有名字的任务非常有助于调试,因为这样能友好地显示每个任务对应的 TCB地址。该名字的字符串存于ROM(如果以常量命名)或者RAM。
.StkBasePtr:{任务堆栈是由高地址向低地址生长}这个指针指向了任务堆栈的基地址。
.TaskEntryAddr:这个变量中包含了任务代码的入口地址,正如前面提到的,任务
用如下方式申明,voidMyTask(void*p_arg);
.TaskEntryAtg:这个变量是当任务第一次运行时传递给任务的参数。正如上面提
到的,这个变量值会传给p_arg。
.PendDataTblPtr:uC/OS-III允许任务同时挂起多个信号量和消息队列。 这个指针指
向了包含这些被挂起对象的表。
.PendDataEntries:这个变量与.PendDataTblPtr一起工作,表示在同一时刻某任务等待的事件数。
.TS:这个变量存储了任务所等待事件出现的时间戳,当任务恢复执行时,时间戳会被返回给任务。
.MsgPtr:当有消息发送给任务时,这个变量保存了该消息的地址。
.MsgSize:当有消息发送给任务时,这个变量保存了消息的大小(以字节为单位)。这个变量仅出现在TCB中,如果消息队列服务(在OS_CFG.H中设置OS_CFG_Q_EN为1)或者任务队列服务(在OS_CFG.H中设置OS_CFG_TASK_Q_EN为1)编译时被使能的话。
.MsgQ:uC/OS-III允许任务或ISR直接发送消息给任务。
.MsgQPendTime:保存了消息从创建到被接收所需的时间。
.MsgQPendTimeMax:这个变量中保存了消息到达所用时间的最大值,它是.MsgQPendTime 的峰值。这个值可以被OSStatReset()复位。
.FlagsPend:当任务等待事件标志组,这个变量保存了任务所等待的标志位。
.FlagsOpt:当任务等待事件标志组,这个变量保存了任务所等待事件标志组
的类型。
.FlagsRdy:这个变量保存了已经被提交的事件标志组 ( 任务所等待的), 换句
话说, 它让任务知道是哪个事件标志组让任务就绪的。
.RegTbl[]:这个数组中包含了任务的”寄存器”, 不同于CPU寄存器。 任务寄
存器用于存储任务ID、软件错误等。
.SemCtr:这个变量保存了信号量的计数值。每个任务都有其的内建信号量。
ISR或其它任务可以通过信号量标记这个任务。
.SemPendTime:中保存着信号量从产生到被接收所用的时间。
.SemPendTimeMax:保存了信号量从产生到被接收所用时间的最大值。
.SuspendCtr:这个变量被OSTaskSuspend()和OSTaskResume()使用,用于记录任务被停止的次数。
.StkSize:这个变量中保存了堆栈的大小( 以CPU_STK为数据类型)。
.StkUsed和.StkFree:在运行时, uC/OS-III可以计算出堆栈的实际使用量和空余量, 这是通过调用OSTaskStkChk()实现的。堆栈使用量计算是假定堆栈在创建时被初始化的情况下的。
.Opt:当任务创建时传递给OSTaskCreate()的参数。它定义任务的附加功能。
.TickCtrPrev:当OSTimeDly()选择OS_OPT_TIME_PERIODIC形式时,该变量
为OSTickCtr的初值。
.TickCtrMatch:当任务被延时一段时间,或者因等待事件而设置时限。任务就会
被放到挂起队列中。
.TickRemain:这个变量中保存了任务到时的剩余时间值,它在OS_TickTask()
中被计算。调试时这个变量是很有用的。
.TimeQuanta和.TimeQuantaCtr:这两个变量用于时间切片,当多个就绪任务有相同的优先级时, .TimeQuanta决定了时间片长度(多少个时基)。 .TimeQuantaCtr中保存了当前时间片的剩余长度。在任务切换开始时将.TimeQuanta的值载入.TimeQuantaCtr。
.CPUUsage:保存了CPU的使用率( 0到100%), 它是被OS_StatTask()计算出
来的。
.CtxSwCtr:保存了该任务被执行的次数。
.CyclesDelta:这上下文切换时被计算,它保存了当前时间戳与CyclesStart的差
值。调试时可以通过它知道该任务的执行时间。
.CyclesStart:这个变量用于测量任务的执行时间, .CyclesStart在上下文切换时
被更新。它保存了任务切换时的时间戳(通过调用OS_TS_GET()获得)。
.CyclesTotal:这个变量是CyclesDelta的累加, 所以它包含了该任务被执行的总
时间。 这个变量被定义为64位防止溢出。
.IntDisTimeMax:这个变量中保存了该任务关中断的最大时间。
.SchedLockTimeMax:保存了该任务锁调度器的最大时间。
.PendOn:该变量的值取决于任务因何被挂起。
.PendStatus:这个变量保存了任务被挂起后的状态,包括4种状态。
.TaskState:这个变量保存了任务当前的状态,包括8种状态。
.Prio:它保存了任务的优先级, 该值介于0到OS_CFG_PRIO_MAX-1
之间。事实上,空闲任务需独占优先级OS_CFG_PRIO_MAX-1。
.DbgNextPtr:该变量是一个指针,在双向TCB列表中,它指向下一个TCB。通
过OSTaskCreate()函数uC/OS-III将TCB放入该列表中。
.DbgPrevPtr:该变量是一个指针,在双向TCB列表中,它指向上一个TCB。
.DbgNamePtr:该变量是一个指针,当任务在等待信号量、事件标志组、 mutex、
消息队列时,它指向目标对象的名字。

10.3-uC/OS-III内部任务管理(TCB)的更多相关文章

  1. uc/os iii移植到STM32F4---IAR开发环境

    也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...

  2. uC/OS - III 移植 IAR平台

    关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...

  3. uC/OS II原理分析及源码阅读(一)

    uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...

  4. uc/os任务创建

    问题描述:      uc/os中任务创建 问题解决: 创建一个任务,任务从无到有.任务创建函数分两种, 一种是基本的创建函数OSTaskCreate, 另一种是扩展的任务创建函数OSTaskCrea ...

  5. uC/OS 的任务调度解析 (转)

    uC/OS 的任务调度解析 1.任务调度器启动之后(初始化,主要是TCB的初始化),就可以创建任务,开始任务调度了,实际上第一个任务准确的说不是进行任务切换,而是进行启动当前最高优先级任务.uC/OS ...

  6. 基于μC/OS—III的CC1120驱动程序设计

    基于μC/OS—III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120   嵌入式操作系统   STM32F103ZE   ...

  7. 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II

    SOPC开发流程之NIOS II 处理器运行 UC/OS II 这里以在芯航线FPGA学习套件的核心板上搭建 NIOS II 软核并运行 UCOS II操作系统为例介绍SOPC的开发流程. 第一步:建 ...

  8. 在STM32F401上移植uC/OS的一个小问题 [原创]

    STM32F401xx是意法半导体新推出的Cortex-M4内核的MCU,相较于已经非常流行的STM32F407xx和STM32F427xx等相同内核的MCU而言,其特点是功耗仅为128uA/MHz, ...

  9. uc/os 任务删除

    问题描述:     uc/os 任务删除 问题解决: uc/os任务删除流程图 具体代码 注:     如上是关中断,以及取消优先级对应的就绪标志 关中断代码为: 取消就绪标志,实际上是将就绪表中指定 ...

  10. 关于uC/OS的简单学习(转)

    1.微内核 与Linux的首要区别是,它是一个微内核,内核所实现的功能非常简单,主要包括: 一些通用函数,如TaskCreate(),OSMutexPend(),OSQPost()等. 中断处理函数, ...

随机推荐

  1. Unity Remote远程调试

    http://www.cnblogs.com/qinghuaideren/p/3623368.html http://blog.csdn.net/u012741077/article/details/ ...

  2. PHP文件解密服务,微擎微赞模块解密,微擎模块解密

    支持Zend/PHP5.3, Zend/PHP5.4, Zend/PHP5.5, Zend/PHP5.6解密 支持IonCube8, IonCube9, IonCube10解密 支持魔方一代,魔方二代 ...

  3. [IR] Concept Search and LSI

    基于术语关系的贝叶斯网络信息检索模型扩展研究 LSI 阅读笔记 背景知识 提出一种改进的共现频率法,利用该方法挖掘了索引术语之间的相关关系,将这种相关关系引入信念网络模型,提出了一个具有两层术语节点的 ...

  4. SpringBoot-服务端参数验证-JSR-303验证框架

    1. springboot 默认集成了 hibernate-validator,它默认是生效的,可以直接使用. 比如: @RestController @RequestMapping("/h ...

  5. 大杂烩 -- HashMap、HashTable、ConCurrentHashMap 联系与区别

    基础大杂烩 -- 目录 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1. Hashtable 和 HashMap ⑴ ...

  6. lua迭代器和泛型for浅析

    (一) 首要概念要理清: 1. 在lua中,函数是一种"第一类值",他们具有特定的词法域."第一类值"表示在lua中函数与其他传统类型的值(例如数字和字符串)具 ...

  7. Redis JdkSerializationRedisSerializer,stringRedisSerializer,ProtoBuf 体积,性能简单比较.

    /** * User: laizhenwei * Date: 2018-04-10 Time: 14:17 * Description: */ @RunWith(SpringRunner.class) ...

  8. 查看Oracle数据库SQL执行历史

    -- 找出哪个数据库用户用什么程序在最近三天执行过delete或truncate table的操作 SELECT c.username, a.program, b.sql_text, b.comman ...

  9. 字符集和编码——Unicode(UTF&UCS)深度历险

    计算机网络诞生后,大家慢慢地发现一个问题:一个字节放不下一个字符了!因为需要交流,本地化的文字需要能够被支持. 最初的字符集使用7bit来存储字符,因为那时只需要存下一些英文字母和符号.后来虽然扩展到 ...

  10. day_6.5 py

    Wireshark的使用  2018-6-5 20:16:05 明天学 03