004‐FreeRTOS202212‐4005‐ 将节点插入到链表的尾部
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐插入前‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐插入后‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
/*‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐*/
void vListInsertEnd ( List_t * const pxList , ListItem_t * const pxNewListItem )
{
ListItem_t * const pxIndex = pxList ‐> pxIndex ;
/*OnlyeffectivewhenconfigASSERT()isalsodefined,thesetestsmaycatchthelistdatastructuresbeingoverwritteninmemory.
TheywillnotcatchdataerrorscausedbyincorrectconfigurationoruseofFreeRTOS.*/
/*
只有在还定义了
configASSERT
()时才有效,这些测试可能会捕获内存中被覆盖的链表数据结构。他们不会捕捉到由于不正确的配置或使用
FreeRTOS
而导致的数据错误
*/
listTEST_LIST_INTEGRITY ( pxList );
listTEST_LIST_ITEM_INTEGRITY ( pxNewListItem );
/*InsertanewlistitemintopxList,butratherthansortthelist,
makesthenewlistitemthelastitemtoberemovedbyacalltolistGET_OWNER_OF_NEXT_ENTRY().*/
/*
在
pxList
中插入一个新链表项,但不是对链表进行排序,而是通过调用
listGET_OWNER_OF_NEXT_ENTRY
()使新链表项成为最后一个要访问的项
*/
pxNewListItem ‐> pxNext = pxIndex ;
pxNewListItem ‐> pxPrevious = pxIndex ‐> pxPrevious ;
/*Onlyusedduringdecisioncoveragetesting.*/
/*
仅在决策覆盖率测试期间使用
*/
mtCOVERAGE_TEST_DELAY ();
pxIndex ‐> pxPrevious ‐> pxNext = pxNewListItem ;
pxIndex ‐> pxPrevious = pxNewListItem ;
/*Rememberwhichlisttheitemisin.*/
/*
记住该节点所在的链表
*/
pxNewListItem ‐> pvContainer = ( void * ) pxList ;
/*链表节点计数器++*/
( pxList ‐> uxNumberOfItems ) ++ ;
}
/*‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐*/
uxNumberOfItems=0
*pxIndex
ListItem_t
链表节点索引指针
UBaseType_t
链表节点计数器32bit
节点排序值
*pxNext
*pxPrevious
structxLIST_ITEM
structxLIST_ITEM
xMINI_LIST_ITEM(MiniListItem_t)
xItemValue=0xffffffffUL
uint32_t/uint16_t(TickType_t)
xListEnd
xLIST(List_t)
链表头结点结构体
指向链表下一个节点
指向链表前一个节点
*pxList
NULL
xItemValue
*pxNext
*pxPrevious
*pvOwner
*pvContainer
内核对象
链表对象
xLIST(List_t)
void
structxLIST_ITEM
structxLIST_ITEM
uint32_t/uint16_t(TickType_t)
节点排序值
xLIST_ITEM(ListItem_t)
指向链表下一个节点
指向链表前一个节点
链表节点结构体
*pxNewListItem
uxNumberOfItems=1
*pxIndex
ListItem_t
链表节点索引指针
UBaseType_t
链表节点计数器32bit
节点排序值
*pxNext
*pxPrevious
structxLIST_ITEM
structxLIST_ITEM
xMINI_LIST_ITEM(MiniListItem_t)
xItemValue=0xffffffffUL
uint32_t/uint16_t(TickType_t)
xListEnd
xLIST(List_t)
链表头结点结构体
指向链表下一个节点
指向链表前一个节点
*pxList
xItemValue
*pxNext
*pxPrevious
*pvOwner
*pvContainer
内核对象
链表对象
xLIST(List_t)
void
structxLIST_ITEM
structxLIST_ITEM
uint32_t/uint16_t(TickType_t)
节点排序值
xLIST_ITEM(ListItem_t)
指向链表下一个节点
指向链表前一个节点
链表节点结构体
*pxNewListItem
*pxIndex