uC/OS中的TCB

      下图简要描绘了uC/OS中的TCB,其中OSTCBFreeList是系统中空闲TCB的单向队列,OSTCBList是已经分配的TCB队列,是双向队列,这两个队列的数据都存储在数组OSTCBTbl中。在函数OS_InitTCBList()中,OSTCBFreeList被初始化,建立队列连接关系。在OSTaskCreate()中调用OS_TCBInit()从OSTCBFreeList中分配一个没有使用的TCB,并将任务信息写入该TCB,同时将其从OSTCBFreeList中删除,加入到双向队列OSTCBList中。在OSTaskDel()中,若要删除优先级为prio的任务,则先通过OSTCBPrioTbl数组在OSTCBList中找到该任务,按照双向链表的方法删除该节点,并且把该TCB节点加入到OSTCBFreeList队首,以供下次使用。每次查找优先级为prio的任务时,当然可以遍历OSTCBList找到该任务,但是过于耗时。为了提高查找速度,uC/OS使用了OSTCBPrioTbl数组来指向相应的TCB指针,OSTCBPrioTbl[prio]指向优先级为prio的TCB指针,这样,增加任务、查找任务、修改任务、删除任务的速度无疑都是常数,优于任何类型的数据结构。当然,其代价是大大增加了对存储的需求。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值