《FreeRTOS列表和列表项篇》

列表和列表项是FreeRTOS的一个数据结构,是FreeRTOS的基石。

1. 什么是列表和列表项?

1.1 列表list

  • 列表在概念上类似双向链表,用来追踪FreeRTOS中的任务
/*
 * Definition of the type of queue used by the scheduler.
 * 任务调度器使用的队列的定义
 */
typedef struct xLIST
{
   
    listFIRST_LIST_INTEGRITY_CHECK_VALUE
    volatile UBaseType_t uxNumberOfItems;	  /* 用来记录列表中列表项的个数,其中不包含末尾列表项。 */
    ListItem_t * configLIST_VOLATILE pxIndex; /* 用来记录当前列表项的索引号,用于遍历列表。 */
    MiniListItem_t xListEnd;                  /* 末尾列表项(迷你列表项),用来表示列表的结束。 */
    listSECOND_LIST_INTEGRITY_CHECK_VALUE
} List_t;

在这里插入图片描述

1.2 列表项list item

  • 列表项指存放在列表中的对象,FreeRTOS提供了2个类型:列表项和迷你列表项。
/*
 * Definition of the only type of object that a list can contain.
 * 定义列表可以包含的唯一对象类型
 */
struct xLIST_ITEM
{
   
    listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE
    configLIST_VOLATILE TickType_t xItemValue;          /* 列表项的值,这用于按升序对列表进行排序 */
    struct xLIST_ITEM * configLIST_VOLATILE pxNext;     /* 指向下一个列表项 */
    struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; /* 指向上一个列表项 */
    void * pvOwner;                                     /* 指向包含列表项的对象(通常是TCB)的指针。*/
    struct xLIST * configLIST_VOLATILE pxContainer;     /* 用来记录此列表项属于哪个列表。 */
    listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE
};
typedef struct xLIST_ITEM ListItem_t;

在这里插入图片描述

#if ( configUSE_MINI_LIST_ITEM == 1 ) /* 若为1,则为普通列表项,若为0,则为迷你列表项。 */
    struct xMINI_LIST_ITEM
    {
   
        listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE
        configLIST_VOLATILE TickType_t xItemValue;		/* 列表项的值,这用于按升序对列表进行排序 */
        struct xLIST_ITEM * configLIST_VOLATILE pxNext;		/* 指向下一个列表项 */
        struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;	/* 指向上一个列表项 */
    };
    typedef struct xMINI_LIST_ITEM MiniListItem_t;
#else
    typedef struct xLIST_ITEM      MiniListItem_t;
#endif

迷你列表项结构示意图

2. 列表和列表项的初始化

2.1 列表的初始化


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值