uxTopReadyPriority = uxTopReadyPriority | (1UL<<pxNewTCB->uxPriority);
//listINSERT_END( &pxReadyTasksLists[pxNewTCB->uxPriority], &pxNewTCB->xStateListItem );
List_t *pxList_; //指向目标优先级的就绪任务列表 (通过TCB的优先级索引)
ListItem_t *pxListItem_; //是待插入的任务状态列表项 (来自TCB的xStateListItem)
pxList_ = &pxReadyTasksLists[pxNewTCB->uxPriority];
pxListItem_ = &pxNewTCB->xStateListItem;
ListItem_t * const pxIndex = pxList_->pxIndex; //是列表的遍历指针 (通常指向列表末尾)
/* Insert a new list item into ( pxList ), but rather than sort the list,
* makes the new list item the last item to be removed by a call to
* listGET_OWNER_OF_NEXT_ENTRY(). */
pxListItem_->pxNext = pxIndex; // 新项的next指向当前索引项
pxListItem_->pxPrevious = pxIndex->pxPrevious; // 新项的prev指向索引项的前驱
pxIndex->pxPrevious->pxNext = pxListItem_; // 前驱项的next指向新项
pxIndex->pxPrevious = pxListItem_; // 索引项的prev指向新项
//Remember which list the item is in.
pxListItem_->pxContainer = pxList_; //记录所属列表 (用于后续从列表移除)
pxList_->uxNumberOfItems++; //更新列表长度计数器
portSETUP_TCB(pxNewTCB);
// [原有节点] ↔ [pxIndex节点]
//形成环形链表结构:[原有节点] ↔ [新节点] ↔ [pxIndex节点]
// volatile UBaseType_t uxNumberOfItems = 0 //链表中元素的个数
// |<---- ListItem_t *pxIndex; //总是指向xListEnd节点,在链表尾部插入的时候,方便找到位置
//|-->|----> TickType_t xItemValue = portMAX_DELAY [MiniListItem_t xListEnd]
//|<-------- struct xLIST_ITEM *pxNext; //后继节点
//|<-------- struct xLIST_ITEM *pxPrevious; //前驱节点
//|------->volatile UBaseType_t uxNumberOfItems = 1 //链表中元素的个数
//| |<-----ListItem_t *pxIndex; //总是指向xListEnd节点,在链表尾部插入的时候,方便找到位置
//| |->|-->TickType_t xItemValue = portMAX_DELAY [MiniListItem_t xListEnd]
//| | struct xLIST_ITEM *pxNext; ----->| //后继节点
//| | struct xLIST_ITEM *pxPrevious; ----->| //前驱节点
//| | |
//| | TickType_t xItemValue; <-------------| //链表节点的值
//| |<--struct xLIST_ITEM *pxNext; //后继节点
//| |<--struct xLIST_ITEM *pxPrevious; //前驱节点
//| void * pvOwner; //保存私有数据
//|<------ struct xLIST *pxContainer; //节点所在的链表
//|------->volatile UBaseType_t uxNumberOfItems = 2 //链表中元素的个数
//| |<-----ListItem_t *pxIndex; //总是指向xListEnd节点,在链表尾部插入的时候,方便找到位置
//| |->|-->TickType_t xItemValue = portMAX_DELAY [MiniListItem_t xListEnd]
//| | struct xLIST_ITEM *pxNext; ---->| //后继节点
//| | struct xLIST_ITEM *pxPrevious;--|----->| //前驱节点
//| | | |
//| |-|-->TickType_t xItemValue; <--------| | //链表节点的值
//| | | struct xLIST_ITEM *pxNext; ----------->| //后继节点
//| | |<--struct xLIST_ITEM *pxPrevious; | //前驱节点
//| | | void * pvOwner; | //保存私有数据
//|<-|-|---struct xLIST *pxContainer; | //节点所在的链表
//| | | |
//| | | TickType_t xItemValue; <-------------| //链表节点的值
//| | |<--struct xLIST_ITEM *pxNext; //后继节点
//| |<----struct xLIST_ITEM *pxPrevious; //前驱节点
//| void * pvOwner; //保存私有数据
//|<------ struct xLIST *pxContainer; //节点所在的链表