FreeRTOS(六)——列表与列表项

列表与列表项简介

列表和列表项是FreeRTOS中的一个数据结构,FreeRTOS中使用了大量的列表和列表项,是FreeRTOS的基石。

列表

列表在概念上和链表有点类似,列表被用来跟踪FreeRTOS中的任务。与列表相关的全部东西都在文件list.c和list.h中。

typedef struct xLIST
{
    listFIRST_LIST_INTEGRITY_CHECK_VALUE                            //(1)
    volatile                UBaseType_t uxNumberOfItems;          //(2)
    ListItem_t * configLIST_VOLATILE  pxIndex;                      //(3) 
    MiniListItem_t            xListEnd;                 //(4)       
    listSECOND_LIST_INTEGRITY_CHECK_VALUE                           //(5)
} List_t;

(1) 和 (5)都是用来检查列表完整行的
(2) uxNumberOfItems 记录列表中列表项的数量
(3) pxIndex  用于遍历列表
(4) 列表中最后一个列表项,用来表示列表结束

不考虑完整性检测列表结构如下图:

列表项

struct xLIST_ITEM
{
    listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE                                       //(1)
    configLIST_VOLATILE TickType_t           xItemValue;                     //(2)
    struct xLIST_ITEM * configLIST_VOLATILE      pxNext;                         //(3)
    struct xLIST_ITEM * configLIST_VOLATILE      pxPrevious;                     //(4)
    void *                         pvOwner;                        //(5)    
    void * configLIST_VOLATILE              pvContainer;                    //(6)
    listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE                                       //(7)
};
typedef struct xLIST_ITEM ListItem_t;                   

(1) 和 (7)用来检查列表项完整性
(2)  xItemValue 为列表项值
(3) pxNext 指向下一个列表项
(4) pxPrevious 指向前一个列表项,和 pxNext 配合起来实现类似双向列表的功能
(5) pvOwner 记录此列表项归谁拥有,通常是任务控制块
(6) pvContainer 记录此列表项归哪个列表

不考虑完整性检测列表项结构如下图:
这里写图片描述

相关API函数

函数 描述
vListInitialise() 列表初始化
vListInitialiseItem() 列表项初始化
vListInsert() 列表项插入
vListInsertEnd() 列表项末尾插入
uxListRemove() 列表项删除
ListGET_OWNER_OF_NEXT_ENTRY() 列表的遍历

列表项的插入与删除

猜你喜欢

转载自blog.csdn.net/qq_30650153/article/details/80951535