FreeRTOS的链表结构是一切的基础,主要实现在list.c和list.h文件里面,是较典型的双向链表。具体数据结构参见下图:
--图一
其中,struct xLIST_ITEM 就是xListItem: typedef struct xLIST_ITEM xListItem;
从图一中可以看出,xListEnd是作为一个哑节点而存在的,他就是为了标明链表的末尾而存在的。需注明的是 portTickType通常是一个unsigned类型的整形。
这里xListItem结构有两个成员是FreeRTOS为方便快速由链表节点找到相应的链表和该链表节点代表的对象而定义的:pvOwner就是拥有这个节点的数据结构的指针,通常是TCB(这从下面TCB的结构中也可以看出),pvContainer指向的就是该节点所在链表的指针了。
链表结构的典型应用就是连接FreeRTOS中的任务控制块TCB,这里将任务控制块的结构贴出方便交叉参考:</