学习freertos第三篇——列表和列表项

今天是2024.10.3,学习了列表和列表项,个人学习的小小总结,如果有误请指正

列表和列表项是什么

列表可以说是freertos中的一种数据结构吧,列表是由列表项组成的,每个列表项又有前继和后继(包括首尾),和双向列表有点像。

列表结构体

(1)和(5)据说是调试的时候用到的宏定义,我们不需要多理会。

(2)是列表中列表项的个数

(3)pxindex是当前列表中所指的列表项,用来遍历列表

(4)迷你列表项,代表一个列表的最后一个列表项,仅用作充当末尾列表项连接列表

简略概括为

列表项结构体

(1)(7)据说是调试的时候用到的宏定义,我们不需要多理会。

(2)代表列表项的值(用于升序排序)

(3)该列表项的后继

(4)该列表项的前继

(5)该列表项归谁所有,通常是任务控制块

(6)该列表项属于哪个列表

简略概括为

迷你列表项

迷你列表项有提到过,他是一个列表的最后一个列表项,而且仅作列表的最后一项,用于连接列表项,无其他作用。因此他只有值,前继,后继三个成员变量(它的value是0xffffffff,因为他是末尾项,最大值)

简略概括为

相关API函数

初始化列表和列表项

初始化列表

void vListInitialise( List_t * const pxList )

列表刚初始化时只带有一个作为末尾列表项的迷你列表项,所以他的index,previous,next都是指向这个末尾列表项。

初始化列表项

void vListInitialiseItem( ListItem_t * const pxItem )

而初始化列表项的函数就很简单了,他只需要初始化他所属的列表为空就可以了

插入列表项

按照升序插入

void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem )

这个是升序插入的函数,也就是说它会根据列表项的value来决定列表项目插入的位置,如果待插列表项的value等于0xffffffff,那他就直接插入在迷你尾列表项之前。如果不是的话,就通过一个for循环,遍历到列表最后一个value小于待插项value的列表项,然后再插入。

按照尾插入

void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem )

尾插入就比较简单了,他会直接插入到列表pxindex所指的列表项的后面。

删除列表项

UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove )

返回值是列表中所剩的列表项数目。

个人学习的小小总结,如果有误请指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值