FreeRTOS学习笔记——列表和列表项

FreeRTOS的列表和列表项

一、列表与列表项的简介:

列表的简介:

列表是 FreeRTOS 中最基本的一种数据结构,其在物理存储单元上是非连续、非顺序的。 列表在 FreeRTOS 中的应用十分广泛,要注意的是,FreeRTOS 中的列表是一个双向链表,在 list.h 文件中,有列表的相关定义,具体代码如下所示:

typedef struct xLIST { 
1.    listFIRST_LIST_INTEGRITY_CHECK_VALUE 							/* 校验值 */
2.	volatile UBaseType_t uxNumberOfItems; 							/* 列表中列表项的数量 */ 
3.	ListItem_t * configLIST_VOLATILE pxIndex; 						/* 用于遍历列表 */
4.	MiniListItem_t xListEnd; 										/* 最后一个列表项 */ 
1.	listSECOND_LIST_INTEGRITY_CHECK_VALUE 							/* 校验值 */ 
     } List_t;
列表中结构体内成员介绍:
结构体中的成员作用备注
1.两个宏:listFIRST_LIST_INTEGRITY_CHECK_VALUE 和 listSECOND_LIST_INTEGRITY_CHECK_VALUEFreeRTOS 通过检查这两个常量的值,来判断列表的数据在程序运行过程中,是否遭到破坏。该功能一般用于调试,默认是不开启的
2.成员变量 :uxNumberOfItems用于记录列表中列表项的个数(不包含 xListEnd),当往列表 中插入列表项时,该值加 1;当从列表中移除列表项时,该值减 1
3.成员变量: pxIndex用于指向列表中的某个列表项一般用于遍历列表中的所有列表项
4.成员变量: xListEnd是一个迷你列表项,列表中迷你列表项的值一般被设置为最大值,用于将列表中的所有列表项按升序排序时,排在最末尾同时 xListEnd 也用于挂载其他插入到列表中的列表项

列表结构示意图:

在这里插入图片描述

列表项的简介:

​ 列表项是列表中用于存放数据的地方,在 list.h 文件中,有列表项的相关定义,具体代码如下所示:

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; 										/* 列表项的拥有者 */ 
    struct xLIST * configLIST_VOLATILE pxContainer; 		/* 列表项所在列表 */ 
    listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE 				/* 用于检测列表项的数据完整性 */ 
}; typedef struct xLIST_ITEM ListItem_t;					/* 重定义成 ListItem_t */
列表项中结构体成员介绍:
结构体中的成员作用
两个宏:listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUElistSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE用于检测列表项数据完整性的宏定义
成员变量: xItemValue为列表项的值,这个值多用于按升序对列表中的列表项进行排序
成员变量: pxNextpxPrevious分别用于指向列表中列表项的下一个列表项(pxNext)和上一个列 表项(pxPrevious)
成员变量:pxOwner用于指向包含列表项的对象(通常是任务控制块),因此,列表项和 包含列表项的对象之间存在双向链接
成员变量 :pxContainer用于指向列表项所在列表
列表项结构示意图

在这里插入图片描述

迷你列表项介绍

​ 迷你列表项也是列表项,但迷你列表项仅用于标记列表的末尾挂载其他插入列表中的列表项,用户是用不到迷你列表项的,在 list.h 文件中,有迷你列表项的相关定义,具体的代码如下所示:

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;		/* 重定义成 MiniListItem_t */
迷你列表项中结构体成员介绍:
结构体中的成员作用
宏:listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE用于检测列表项数据完整性的宏定义
成员变量: xItemValue为列表项的值,这个值多用于按升序对列表中的列表项进行排序
成员变量 :pxNext 和 pxPrevious分别用于指向列表中列表项的下一个列表项和上一个列 表项。
 迷你列表项相比于列表项,因为只用于标记列表的末尾和挂载其他插入列表中的列表项,因此不需要成员变量 pxOwner 和 pxContainer,以节省内存开销。
列表项结构示意图

在这里插入图片描述

二、FreeRTOS 列表和列表项相关 API 函数

函数API概览:

函数描述
vListInitialise()初始化列表
vListInitialiseItem()初始化列表项
vListInsertEnd()列表末尾插入列表项
vListInsert()列表插入列表项
uxListRemove()列表移除列表项

函数vListInitialise()

此函数用于初始化列表,在定义列表之后,需要先对其进行初始化,只有初始化后的列表, 才能够正常地被使用。

列表初始化的过程,其实就是初始化列表中的成员变量。函数原型如下所示:

 void vListInitialise(List_t * const pxList);

函数 vListInitialise()的形参描述

pxList 待初始化列表


今天懒了健身房完,晚上回来再继续更新哈!!,大家可以点赞收藏一下

  • 27
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值