FreeRTOS中数据结构链表思考的几个问题

使用的资料为野火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的下一个节点和上一个节点。

FreeRTOS中数据结构链表思考的几个问题_第1张图片

如上图所示,List_Test为根节点,其他为子节点,顺序插入了这个链表,所以你看这个List_t->xListEnd的下一个就为1节点,上一个就为3节点也就是末尾的节点。

你可能感兴趣的:(FreeRTOS)