准备好运行的任务被放到就绪列表中, 如图6-1。就绪列表是一个数组( OSRdyList[]),它一共有OS_CFG_PRIO_MAX条记录,记录的数据类型为OS_RDY_LIST(见OS.H)。就绪列表中的每条记录都包含了三个变量 .Entries 、 .TailPtr 、 .HeadPtr。
11.1-uC/OS-III就绪列表-LMLPHP
.Entries中该优先级的就绪任务数。当该优先级中没有任务就绪
时, .Entries就会被设置为0。
.TailPtr和.HeadPtr用于该优先级就绪任务的建立双向列
表。
.HeadPtr指向列表的头部, .TailPtr指向列表的尾部。
2.表6-2中列出了与就绪列表相关的操作函数。这些都是uC/OS-III的内部函数,用户不能调用它们。
3.就绪列表
11.1-uC/OS-III就绪列表-LMLPHP
( 1).该图显示的是就绪列表为空时的状态。
( 2).有多少种优先级,就绪列表中就由多少条记录。每个记录中都有3个变量。 Entries为该记录中的任务数。 .PrevPtr和.NextPtr用于指向具有相同优先级到TCB组成的双向列表。对于空闲任务,这两个值为NULL。
( 3).优先级0是为中断处理任务保留的(当设置OS_CFG.H中的OS_CFG_ISR_DEFERRED_EN为1)。在这种情况下, 它是唯一一个能被设为优先级0的任务。
4.假定uC/OS-III内部的任务都被使能。图6-5显示了当OSInit()被调用后的就绪列表:
11.1-uC/OS-III就绪列表-LMLPHP
( 1).如图所示,时基任务和另两个任务有它们自己的优先级。uC/OS-III允许多个任务有相同的优先级。特别的,时基任务的优先级要高于定时器任务,定时器任务的优先级需要于统计任务。
( 2).当某个优先级中只有一个任务的时候,它的头指针和尾指针会指向同一个TCB。

05-08 08:46