freertos中的任务调度,延时调度主要算法用到了链表。 搞懂链表算法需要理清处以下几个链表类型的关系。
1. ListItem_t指针:
struct xLIST_ITEM
{
listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE //检测位,当该值不为预设值时认为变量被破坏
configLIST_VOLATILE TickType_t xItemValue; //内容值
struct xLIST_ITEM * configLIST_VOLATILE pxNext;
struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;
void * pvOwner; //使用者指针,例如任务链表等。
void * configLIST_VOLATILE pvContainer; //反向获取上一层的list指针
listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE
};
它是真正实现链表算法的结构体。
2.xLIST指针
typedef struct xLIST
{
listFIRST_LIST_INTEGRITY_CHECK_VALUE
configLIST_VOLATILE UBaseType_t uxNumberOfItems; //当前链表元素数
ListItem_t * configLIST_VOLATILE pxIndex; //对应的item结构
MiniListItem_t xListEnd; //链表绝对位置
listSECOND_LIST_INTEGRITY_CHECK_VALUE
} List_t;
它的作用就是主要是管理:
1)可知当前的链表数
2)能够进行链表的排序和插入。
3. MiniListItem_t
struct xMINI_LIST_ITEM
{
listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE
configLIST_VOLATILE TickType_t xItemValue; //内容值
struct xLIST_ITEM * configLIST_VOLATILE pxNext;
struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;
};
精简版ListItem_t,用于xListEnd只起到定位作用。