STM32H750之FreeRTOS学习--------(六)FreeRTOS的列表和列表项

本文详细介绍了FreeRTOS中使用的列表数据结构,包括List_t和ListItem_t结构体,以及相关API函数如vListInitialise(),vListInsertEnd(),和uxListRemove()。这些函数用于初始化列表、插入和移除列表项,适用于动态任务管理,确保任务状态的不确定性下数据结构的灵活性。
摘要由CSDN通过智能技术生成

六、FreeRTOS的列表和列表项

  • 列表就是一个双向链表,用来存放FreeRTOS中的任务列表项

image-20231114162723449

  • 列表相当于链表,列表项相当于节点,FreeRTOS 中的列表是一个双向环形链表
  • 列表的特点:列表项间的地址非连续的,列表项的数目是由后期添加的个数决定的
  • 数组的特点:数组成员地址是连续的,数组在最初确定了成员数量后期无法改变
  • 在OS中任务的数量是不确定的,并且任务状态是会发生改变的,所以非常适用列表(链表)这种数据结构
列表相关结构体
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;

image-20231114163444578

  1. 在该结构体中, 包含了两个宏,这两个宏是确定的已知常量, FreeRTOS通过检查这两个常量的值,来判断列表的数据在程序运行过程中,是否遭到破坏 ,该功能一般用于调试, 默认是不开启的
  2. 成员uxNumberOfItems,用于记录列表中列表项的个数(不包含 xListEnd)
  3. 成员 pxIndex 用于指向列表中的某个列表项,一般用于遍历列表中的所有列表项
  4. 成员变量 xListEnd 是一个迷你列表项,排在最末尾
列表项相关结构体
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; 	

image-20231114164241958

  1. 成员变量 xItemValue 为列表项的值,这个值多用于按升序对列表中的列表项进行排序

  2. 成员变量 pxNext 和 pxPrevious 分别用于指向列表中列表项的下一个列表项和上一个列表项

  3. 成员变量 pxOwner 用于指向包含列表项的对象(通常是任务控制块)

  4. 成员变量 pxContainer 用于指向列表项所在列表。

迷你列表项
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;

image-20231114164128553

  1. 成员变量 xItemValue 为列表项的值,这个值多用于按升序对列表中的列表项进行排序
  2. 成员变量 pxNext 和 pxPrevious 分别用于指向列表中列表项的下一个列表项和上一个列表项
  3. 迷你列表项只用于标记列表的末尾和挂载其他插入列表中的列表项,因此不需要成员变量 pxOwner 和 pxContainer,以节省内存开销
列表相关API函数介绍
函数描述
vListInitialise()初始化列表
vListInitialiseItem()初始化列表项
vListInsertEnd()列表末尾插入列表项
vListInsert()列表插入列表项
uxListRemove()列表移除列表项
初始化列表vListInitialise()

image-20231114164901659

image-20231114164746730

image-20231114164850447

函数vListInitialiseItem()

image-20231114164924056

image-20231114164935137

image-20231114164944229

函数vListInsert()

此函数用于将待插入列表的列表项按照列表项值升序进行排序,有序地插入到列表中

image-20231114165047846

image-20231114165104681

image-20231114165411119

image-20231114165426735

函数vListInsert(),是将待插入列表的列表项按照列表项值升序进行排序,有序地插入到列表中

函数 vListInsertEnd()

image-20231114165504754

image-20231114165515159

此函数用于将待插入列表的列表项插入到列表 pxIndex 指针指向的列表项前面,是一种无序的插入方法

image-20231114165952815

image-20231114170000741

image-20231114170011380

image-20231114170026807

函数vListInsertEnd(),是将待插入的列表项插入到列表 pxIndex 指针指向的列表项前面;它是一种无序的插入方法!!

函数 uxListRemove()

image-20231114170148130

image-20231114170201873

image-20231114170331728

image-20231114170344204

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

计算机小混子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值