1、链表节点的数据结构
struct xLIST_ITEM
{
TickType_t xItemValue; /* 辅助值,用于帮助节点做顺序排列 */
struct xLIST_ITEM * pxNext; /*指向链表下一个节点 */
struct xLIST_ITEM * pxPrevious; /* 指向链表前一个节点*/
void * pvOwner; /* 指向拥有该节点的内核对象,通常是 TCB */
void * pvContainer; /*指向该节点所在的链表 */
};
typedef struct xLIST_ITEM ListItem_t; /* 节点数据类型重定义 */
节点示意图如下图所示:

2、链表节点的初始化
链表节点ListItem_t总共有5个成员,但是初始化的时候只需要将pvContainer初始化未空即可,表示节点还没有插入到任何链表。具体实现代码如下:
void vListInitialiseItem( ListItem_t * const pxItem )
{
/*初始化该节点所在的链表为空,表示节点还没有插入任何链表 */
pxItem->pvContainer = NULL;
}
3、定义链表根节点数据结构
根节点示意图如下所示:
typedef struct xLIST
{
UBaseType_t uxNumberOfItems; /* 链表节点计数器,用于表示该链表下有多少个节点 */
ListItem_t * pxIndex; /* 链表节点索引指针,用于遍历节点 */
MiniListItem_t xListEnd; /* 链表最后一个节点*/

本文介绍了FreeRTOS中链表的实现,包括链表节点的数据结构、初始化、链表根节点定义、节点插入(尾部及升序排列)以及节点删除等关键步骤,详细解析了链表操作的实现细节。
最低0.47元/天 解锁文章
528

被折叠的 条评论
为什么被折叠?



