目录
精华总结:
列表和列表项
架构脑图:
列表和列表项的简介
列表的结构
列表项
迷你列表项
列表和列表项的关系
FreeRTOS 列表和列表项相关 API 函数
架构脑图:
列表和列表项相关 API 函数
函数 vListInitialise()
函数 vListInitialiseItem()
函数 vListInsertEnd()
函数 vListInsert()、
函数 uxListRemove()
架构总结:
参考链接:
精华总结:
列表是存放任务的,列表有三种就绪、阻塞、挂起,没有运行态列表,列表的优先级为0-31,一个列表中可以存放多个任务,而任务是有优先级的,比如2优先级的任务存放在列表中,列表中的列表项就是任务,多个列表项之间通过链表连接(双向循环链表)
列表的特点:列表项间的地址非连续的,是人为的连接到一起的。列表项的数目是由后期添加的个数决定的,随时可以改变
rtos中任务的创建和删除是无时无刻存在的,因此链表这种数据结构很好地实现任务的管理并且实时
列表和列表项
架构脑图:
列表和列表项的简介
列表的结构
1、列表、列表项、末尾列表项=mini列表项=迷你列表项都是结构体。
2、列表包含列表项,也包含mini列表项
列表项
迷你列表项
迷你列表项也是列表项,但迷你列表项仅用于标记列表的末尾和挂载其他插入列表中的列
表项,用户是用不到迷你列表项的
列表和列表项的关系
1、先上后下,即上一个指针,下一个指针
2、升序排列,末尾列表项的数值最大,所以在最底,永远是它首先指向别人(别的列表项)
3、previous指针指向最后一个插入的,next指针指向第一个插入的,双向循环链表,两个环,手拉手
4、没有列表插入的时候,列表的数值=0,index指针指向末尾列表项,末尾列表项的两个指针指向自己
列表数值变为了2
FreeRTOS 列表和列表项相关 API 函数
架构脑图:
列表和列表项相关 API 函数
函数 vListInitialise()
1、初始化时,列表中只有 xListEnd,因此 pxIndex 指向 xListEnd
2、xListEnd 的值初始化为最大值,用于列表项升序排序时,排在最后
3、初始化时,列表中只有 xListEnd,因此上一个和下一个列表项都为 xListEnd 本身
4、初始化时,列表中的列表项数量为 0(不包含 xListEnd)
函数 vListInitialiseItem()
1、初始化时,列表项不属于任何一个列表,所以为空
函数 vListInsertEnd()
1、获取列表 pxIndex 指向的列表项
2、将待插入的列表项插入到 pxIndex所指向的列表项前面
3、更新待插入列表项的所在列表
4、更新列表中列表项的数量
函数 vListInsert()、
1、获取新插入的列表项的值
2、判断新插入的列表项数值大小
- 如果数值等于末尾列表项的数值。就插入到末尾列表项前面
- 否则遍历列表中的列表项,找到插入的位置
3、将列表项插入前面所找到的位置
4、更新待插入列表项所在列表
5、更新列表中列表项的数量
函数 uxListRemove()
1、获取所要移除的列表项的所在列表
2、从列表中移除列表项
3、如果 pxIndex 正指向待移除的列表项,将其指向带移除的上一个列表项
4、将待移除列表项的所在列表指针清空
5、列表的列表项数目减一
6、返回列表项移除后列表中列表项的数量
架构总结:
参考链接:
https://blog.csdn.net/weixin_44639540/article/details/129029413