×
单片机 > 单片机程序设计 > 详情

快速学Arm(18)--对uC/OS-II任务管理的理解

发布时间:2022-09-05 发布时间:
|

看了半天关于uC/OS-II的关于任务管理的章节,由于手头的书对此叙述经常是在后面很远的章节叙述前面出现的疑问,所以对我心中的疑问也没有完全的解释.需要阅读到书的后面的时候或许能找到一些答案.也或许再阅读其他数据对本段内容的叙述时才能够准确的进行解释.


前一篇中,讲述了在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的指针.

看了两天ucos2发现这东西实在是比较花费时间,否则想玩得很流畅是不太容易的.我缺的就是时间,每天一堆事情,太长的周期会让我放弃很多其他重要的事情.而且即使我把框架搭好了,手下的弟兄恐怕开发起来也会很吃力.有很多经验不丰富的人,由于基础知识缺乏很多,要想在一个复杂系统上把程序写得很稳定几乎是非常困难的事情,而很多好习惯的养成有需要一段漫长的过程,我不能保证在短时间内有那个弟兄能如此出类拔萃.因此还是接受了别人的建议从单任务开始,这样能够循序渐渐些.因此后面将再回到对单任务的学习,暂时将ucos2放到一边,看来学习的过程就是这样千折百回,打造一个优秀的工程师的确不是一件容易的事情.老板们对那些优秀的工程师应该各位珍惜,他们的确是宝贵的资源.



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈msp430f5529入门(2)----时钟配置.例程分析