FreeRTOS列表和列表项(1)

本文详细介绍了FreeRTOS中的列表(List)和列表项(List Item),包括它们的结构、用途、迷你列表项的区别以及在任务管理中的作用。特别强调了列表完整性检查和迷你列表项节省内存的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是列表和列表项

1、列表
列表是FreeRTOS中的一个数据结构,概念上和链表有点类似,列表被用来跟踪FreeRTOS中的任务。与列表相关的全部东西都在文件list.c和list.h中。在list.h中定义了一个叫List_t的结构体,如下:

typedef struct xLIST
{
listFIRST_LIST_INTEGRITY_CHECK_VALUE                    (1)
configLIST_VOLATILE UBaseType_t uxNumberOfItems;        (2)
ListItem_t *configLIST_VOLATILE pxIndex;                (3)
MiniListItem_t xListEnd;                                (4)
listSECOND_LIST_INTEGRITY_CHECK_VALUE                   (5)
}List_t;

(1) 和(5)、这两个都是用来检查列表完整性的,需要将宏
configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES设置为1,开启以后会向这两个地方分别添加一个变量xListIntegrityValue1和xListIntegrityValue2,在初始化列表的时候会这两个变量中写入一个特殊的值,默认不开启这个功能。
(2)、uxNumberOfItems用来记录列表中列表项的数量。
(3)、pxIndex用来记录当前列表项索引号,用于遍历列表。
(4)、列表中最后一个列表项,用来表示列表结束,此变量类型为MiniListItem_t,这是一个
迷你列表项。
列表结构示意图如下所示:在这里插入图片描述
注意:上图并未列出列表完整性检查的成员变量。

2、列表项
列表项就是存放在列表中的项目,FreeRTOS提供了两种列表项:列表项和迷你列表项。这
两个都在文件list.h中有定义,先来看一下列表项,定义如下:

struct xLIST_ITEM
{
listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE            (1)
configLIST_VOLATILE TickType_t  xItem Value;         (2)
struct xLIST_ITEM* configLIST_VOLATILE pxNext;       (3)
struct xLIST_ITEM* configLIST_VOLATILE pxPrevious;   (4)
void* pvOwner;                                       (5)
void*configLIST_VOLATILE pvContainer;                (6)
listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE           (7)
};
typedef struct xLIST_ITEM ListItem_t;

(1) 和(7) 、用法和列表一样,用来检查列表项完整性的。
(2)、xItemValue为列表项值。
(3)、pxNext指向下一个列表项。
(4)、pxPrevious指向前一个列表项,和pxNext配合起来实现类似双向链表的功能。
(5)、pvOwner记录此链表项归谁拥有,通常是任务控制块。
(6)、pvContainer用来记录此列表项归哪个列表。注意和pvOwner的区别。
列表项结构示意图如下图所示:在这里插入图片描述
注意:上图并未列出列表项完整性检查的成员变量
3、迷你列表项
现在来看一下迷你列表项,迷你列表项在文件list.h中有定义,如下:

struct xMINI_LIST_ITEM
{
listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE         (1)
configLIST_VOLATILE TickType_t  xItemValue;       (2)
struct xLIST_ITEM*configLIST_VOLATILE pxNext;     (3)
struct xLIST_ITEM*configLIST_VOLATILE pxPrevious; (4)
};
typedef struct xMINI_LIST_ITEM MiniListItem_t;

(1)、用于检查迷你列表项的完整性。
(2)、xltemValue记录列表列表项值。
(3)、pxNext指向下一个列表项。
(4)、pxPrevious指向上一个列表项。
可以看出迷你列表项只是比列表项少了几个成员变量,迷你列表项有的成员变量列表项都有的,没感觉有什么本质区别啊?那为什么要弄个迷你列表项出来呢?那是因为有些情况下不需要列表项这么全的功能,可能只需要其中的某几个成员变量,如果此时用列表项的话会造成内存浪费!比如上面列表结构体List_t中表示最后一个列表项的成员变量xListEnd就是
MiniListItem_t类型的。
迷你列表项结构示意图如下图所示:在这里插入图片描述
注意:上图并未列出迷你列表项完整性检查的成员变量。

列表和列表项今天就介绍到这里!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

留小乙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值