原创 UC/OS-II学习笔记7--任务控制块

2014-6-30 01:00 2039 21 22 分类: MCU/ 嵌入式 文集: OS

 

1、任务控制器块是什么:

UC/OS-II用来记录任务的堆栈指针、任务的当前状态、任务的优先级等这些与任务管理相关的属性的表

——就是任务控制块;

UC/OS-II通过把系统所有任务的控制块链接为两条链表,并且是通过这两条链表来管理各个任务的;

 

2、任务控制块链表

为了便于后面需要,UC/OS-II在初始化时也要按照配置文件所设定的任务数(在OS_CFG.H中设定)事先定义一批空白任务控制块,如此,当你需要创建一个任务时肯定需要一个任务控制块,那么我直接把手中事先创建好的空白的一个给你,让你填上任务的属性即可使用。

如前所述,UC/OS-II需要两条链表来管理任务:

1)空任务块链表(所谓空:就是所有任务控制块都还没分配给任务);

2)任务块链表(其中所有任务都已经分配给任务);

 

——为了更快的访问任务控制块,UC/OS-IIuCOS_H.h 文件中,定义了一个数组OSPrioTbl[],数据类型为OS_TCB,这个数组的一生使命就是以任务的优先级别为顺序存放了指向各个任务控制块的指针,如此,便可以通过这个数组来找到一个任务的指针了。

——明显,当前任务控制块是访问频率最高的,因而,UC/OS-II 专门定义了一个变量OSTCBur来存放当前任务控制块指针。

 

3、任务控制块的初始化

当用户调用OSTaskCreate()创建一个任务时,这个函数本身自己会调用系统函数OSTCBInit()来为任务控制块进行初始化。

该初始化函数主要配置七个数据:

 

捕获.jpg

4、任务就绪表

    在当前任务执行结束后对所就绪的任务进行调度,选择优先级最高的就绪好的任务执行。明显,为了方便有效地运行,系统需要一个表,登记所有已经就绪的任务。这个表就叫任务就绪表。实际上这个表是一个数组,类型INT8U ,名字叫做OSRdyTbl[],这数组的一个元素是一个字节,8位,每一位以10 来表示任务的就绪状态(1则为就绪,0为不就绪),可以表达8个任务的就绪状态。为了管理更多的任务,UC/OS-II还定义了一个数据类型为INT8U的变量OSRdyGrp,并使该变量的每一位对应了上述的OSRdyTbl[]的一个元素,如此,一OSRdyGrp可以管理8*8=64个任务。

      由上可知,对就绪任务表的操作主要有三个:

1)登记:在就绪表中将该任务的对应位置置1

2)注销:在就绪表中将该任务的对应位置置0

3)查找最高优先级的就绪任务;

 

5、任务挂起与恢复

1)任务挂起:通过函数OSTaskSupend()

2)任务恢复:通过函数OSTaskResume()

在任务被挂起后,只能通过恢复函数OSTaskResume()使其恢复为就绪状态。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户593939 2013-1-18 23:09

参考了,学习了

用户424277 2012-10-11 15:01

支持,会不会是连载呢
相关推荐阅读
啊左不是蜗牛 2015-01-28 09:21
【博客大赛】那样的人生,看不穿
         昨晚11点跟PM姐姐聊天,问她今晚要不要加班,她回:刚刚开发哥哥陪她出来打的。。。我以为我十点半从实验室回去已经够晚了。。我脸红了。        我问她为什么不早点回去...
啊左不是蜗牛 2015-01-13 19:41
【智能手机】三个观点说说国产手机未来
在此篇文章之前还有一个各大手机品牌的总结,请点击查看。 智能手机之论英雄出处      谈手机之前换个角度,类比一下PC领域。 PC领域毛利最高的时候,国产PC一直混在低端。随着时代发...
啊左不是蜗牛 2015-01-09 17:56
【智能手机】论英雄出处
我认为,如果你不知道对手的底细,那么你就很难战胜对手。知己知彼,百战百胜。所以,我简单地说说我对这几家手机品牌的看法。个人之见,欢迎讨论。   苹果: 1976年成立,在乔布斯这样的天...
啊左不是蜗牛 2014-11-19 13:48
【博客大赛】蜗牛求职记之华为篇
1、前言说明          蜗牛是电赛出身,本科做硬件嵌入式,画板子和写C程序,然后研究生阶段是转战android,但是由于项目涉及到硬件,导师项目众多,小伙伴少,于是我也负责部分st...
啊左不是蜗牛 2014-08-16 14:38
以另一种位图的思想来解决一道OJ题目
前言: 以前所接触到的位图的思想都是以1位的形式去存储某个数出现的次数是1次还是0次。常见的例子不外乎在《编程珠玑》上的开篇例子里,1千万个数的排序统计,用1.25M的内存空间就可以达到遍历一...
啊左不是蜗牛 2014-08-15 11:57
Android 笔记之 listview 性能优化
列表显示需要三个元素, (1)listview 视图,用来显示列表的View ; (2)适配器,用来把数据映射到listView上面的 (3)数据,具体将被映射的数据,包括字符串,图片...
我要评论
1
21
关闭 站长推荐上一条 /3 下一条