在μC/OS-Ⅲ系统中任务挂起表与任务就续表十分相似,只不过任务就续表记录就绪状态的任务,任务挂起表记录等待某个内核对象的任务。任务挂起表是一个类型为OS_PEND_LIST的数据结构,包含三个成员:1、NbrEntries,等待表中表项数目;2、TailPtr,指向等待表中最后一个任务(优先级最低的任务);3、HeadPtr,指向等待表中第一个任务(优先级最高的任务)。

     任务挂起表并不直接指向任务的控制块OS_TCB,而是指向一个OS_PEND_DATA类型的中间变量。该类型变量在任务被放入任务挂起表时动态地分配到该任务的堆栈空间中。该类型数据结构包含8个成员:

1、PrevPtr:指向任务挂起表中前一个等待相同内核对象的更高优先级或优先级相同的OS_PEND_DATA类型变量。

2、NextPtr:指向任务挂起表中后一个等待相同内核对象的优先级相同或更低先级的OS_PEND_DATA类型变量。

3、TCBPtr:指向等待该内核对象的任务的控制块OS_TCB。

4、PendObjPtr:指向任务正在等待的内核对象。(μC/OS-Ⅲ中信号量、互斥型信号量、事件标志组、消息队列等内核对象均为OS_PEND_OBJ类型)

5、RdyObjPtr:在任务等待多个内核对象的情况下,指向已经准备就绪的内核对象。

6、RdyMsgPtr:在任务等待多个内核对象的情况下,指向通过OSQPost()函数发布的信息。

7、RdyMsgSize:记录OSQPost()函数发布的信息长度。

8、RdyTS:时间戳,记录内核对象被释放(Post)的时刻。

posted on 2014-09-24 12:21  一切皆没可能  阅读(277)  评论(0编辑  收藏  举报