开启辅助访问 切换到窄版

打印 上一主题 下一主题

uCOS II 系列文章之 TCB

[复制链接]
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
预计阅读时间: 3 分钟


任务控制块 TCB:


[img=415.3pt,111pt]http://www.embed.cc/bbs/source/plugin/csdn123_news/display_picture.php?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FfpA42W9rbq6cutNjnqT45nnMDgNECrb1w92hUVyiadKGib8We1OoA2ER1nMEmCZdzlazpcwBCqbjAEGZHlPDDuZw%2F640%3Fwx_fmt%3Dpng[/img]

OSTCBPrioTbl该表用于查找 TCB,用优先级作为索引,可以很方便的查找 TCB,但是这是在所有任务优先级都不同的前提下的。像 u/COS III 没有这个限制就不能这么用了,因为任务之间的优先级可以相同。

该表有几点好处:

1、方便查找任务控制块(TCB)

2、可以在创建任务的时候作为一个标志位,如果设置为保留标志,那么对该优先级的所有资源进行锁定,其他任务看到该标志就不再使用该任务资源,这样就可以在开中断的情况下从容进行后续工作,以减少关中断的时间。他也是一个优先级是否被使用的标志

3、节省空间。在优先级很多,但是不需要那么多实际的任务情况下,就不需要分配那么多实际的 TCB 了(和第一点有关系)。优先级数多于实际任务数主要是为了扩展,版本兼容,保留几个高优先级,以在将来升级使用,在实际任务之间插入一些优先级,如果后面需要加入新功能就可以在不改动其他任务的情况下添加任务。

OSTCBCur始终指向当前任务的 TCB,和 OSTCBHighRdy 结合使用,还有两个相关变量是  OSPrioHighRdy(查找的处于就绪态的最高优先级)OSPrioCur(当前优先级),当进行任务切换时,会将找到的最高优先级保存到 OSPrioHighRdy,通过 OSTCBPrioTbl[OSPrioHighRdy] 找到新任务的 TCB 地址,保存在 OSTCBHighRdy,然后 OSPrioHighRdy OSPrioCur 比较,如果不相等就进行任务切换(相等也就不需要进行切换)。

OSTCBFreeList这个是空闲 TCB 的链表,所有没有使用的 TCB 都放在这里。

OSTCBList这个是已使用的 TCB 的链表。所有任务创建后都把相应的 TCB 链接在这个表里。后链接的 TCB 作为新表头,因为系统任务比用户的任务先创建,所以在链表的末尾。在 SysTick 处理函数中,它会遍历所有的 TCB,直到遇到空闲任务就放弃遍历,所以空闲任务必须在链表的尾巴部分。




-THE END-



如果觉得文章对你有帮助,欢迎转发、分享给朋友,感谢你的支持!



微信公众号「鱼鹰谈单片机

每周一更单片机知识


长按后识别图中二维码关注



  如果对你有帮助,在这里点个好看再走呗

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表