shivency

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

额外的,在网上收录的段子,会不断补充:

 

1、看到一段很有意思的话,来自Eagle的BLOG

 

……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………

前一篇中,讲述了在ucos2中定义了一些用于任务管理的变量:
    *OSTCBCur,*OSTCBFreeList,*OSTCBHighRdy,*OSTCBList,*OSTCBPrioTbl[],OSTCBTbl[].
    如果你足够细心的话可以注意到,在这些变量中唯独OSTCBTbl不是指针,而是一个纯粹的数组.也就是说在系统初始化的时候,所有创建的TCB块都被放置到OSTCBTbl[]数组中,但是这些TCB块都是空的,因此没有指定哪个元素时什么样优先级的TCB.而在所有的操作中,这个数组是始终存在的,各个任务的TCB块在这个数组中的位置始终是不变的.
 
    但是为了管理TCB,我们需要一些指针来指向处于各种状态的TCB块,甚至要把他们连接成链表,或者组成指针数组,这样就可以指定不同的链表的功能.
    打个比方,OSTCBTbl[10],那么就是说有10个TCB资源,在没有使用的时候,*OSTCBFreeList指向它们,也就是说所有的还都是空闲的,*OSTCBFreeList指向OSTCBTbl[0],当OSTCBTbl[0]被分配了,*OSTCBFreeList就指向OSTCBTbl[1],直到指向最后一个NULL.这样*OSTCBFreeList指针就确定了OSTCBTbl数组中还有多少个是空闲的TCB可以用来分配.
 
    接下来就是另一个指针*OSTCBList,这个指通过TCB中的OSTCBNext指针形成一个链表,这个链表代表所有进入就绪状态的任务的TCB.相当于每次有新任务申请了TCB块,*OSTCBList的链表就增加了,而*OSTCBFreeList则在缩短.
    *OSTCBPrioTbl[]是一个指针数组,它按照以优先级为序号,将OSTCBTbl数组中的元素的指针形成一个数组.每个元素的在数组中的索引就是优先级号,而OSTCBPrioTbl中每个元素指向OSTCBTbl数组中相应的优先级的TCB.
    *OSTCBHighRdy指针,我理解就是在OSTCBList链表中优先级最高的TCB的指针,这个指针能够让系统知道下一个要使用的是哪一个TCB.
    *OSTCBCur指针,我还没明白与其他指针,数组的关系,应该是真正执行的任务的TCB的指针.
……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
 
说他有意思,是因为,作者注意到了OSTCBTbl[]是一个数组,而在一般人眼里,数组和指针差不多可以混为一谈。
 
也许我应该把这段放在讲数据结构那里,但感觉那样太埋没这话了,特此拉出。
posted on 2013-06-14 20:13  shivency  阅读(567)  评论(0编辑  收藏  举报