使用的资料为野火FreeRTOS教程:其中有一个
/* 将节点插入链表的尾部的一个函数如下*/
void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem )
{
ListItem_t * const pxIndex = pxList->pxIndex;
pxNewListItem->pxNext = pxIndex;
pxNewListItem->pxPrevious = pxIndex->pxPrevious;
pxIndex->pxPrevious->pxNext = pxNewListItem;
pxIndex->pxPrevious = pxNewListItem;
/*记住该节点所在的链表*/
pxNewListItem->pvContainer = ( void * ) pxList;
/* 链表节点计数器加1 */
( pxList->uxNumberOfItems )++;
}
最开始没怎么看懂,记录下自己的几点理解:
1:List_t这个结构体,可以理解为根节点,其下面可以挂很多子节点。
2:ListItem_t子节点
3:上面的插入操作。需要理解的是,这个List_t->xListEnd到底是最后的一个节点,还是最开始的一个节点,其实通过我的仿真来看,List_t->pxIndex为最开始的一个跟节点,而所谓的最后一个节点List_t->xListEnd其实包含的两个变量分别就是List_t->pxIndex的下一个节点和上一个节点。
如上图所示,List_Test为根节点,其他为子节点,顺序插入了这个链表,所以你看这个List_t->xListEnd的下一个就为1节点,上一个就为3节点也就是末尾的节点。