列表
列表是把列表项全部穿起来,与链表相似,是用来跟踪freertos中的任务,与列表相关的函数都在
list.c
和
list.h
列表的结构体
typedef struct xLIST
{
listFIRST_LIST_INTEGRITY_CHECK_VALUE //检查列表完整性
configLIST_VOLATILE UBaseType_t uxNumberOfItems; //表示列表项的数量
ListItem_t * configLIST_VOLATILE pxIndex; //记录列表项索引号
MiniListItem_t xListEnd; //迷你列表项
listSECOND_LIST_INTEGRITY_CHECK_VALUE //检查列表完整性
} List_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; //决定列表项归哪个列表
listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE //检查列表完整性
};
mini列表项
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;
};
与列表相关的API函数
列表初始化
void vListInitialise( List_t * const pxList )
{
pxList->pxIndex = ( ListItem_t * ) &( pxList->xListEnd );
pxList->xListEnd.xItemValue = portMAX_DELAY;
pxList->xListEnd.pxNext = ( ListItem_t * ) &( pxList->xListEnd );
pxList->xListEnd.pxPrevious = ( ListItem_t * ) &( pxList->xListEnd );
pxList->uxNumberOfItems = ( UBaseType_t ) 0U;
listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList );
listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList );
}
实验
vListInitialise(&Testlist); //初始化列表
vListInitialiseItem(&listitem1); //初始化列表项
vListInitialiseItem(&listitem2);
vListInitialiseItem(&listitem3);
listitem1.xItemValue = 40; //列表项值 列表根据列表项值排序
listitem2.xItemValue = 60;
listitem3.xItemValue = 50;
vListInsert(&Testlist,&listitem1);//插入列表
uxListRemove(&listitem2); //删除列表项