#每日话题# #有奖活动# #技术资源# # FreeRTOS操作系统学习
# 前言
列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来跟踪 FreeRTOS中的任务。与列表相关的全部东西都在文件 list.c 和 list.h 中。
列表项就是存放在列表中的项目,FreeRTOS 提供了两种列表项:列表项和迷你列表项。这两个都在文件 list.h 中有定义
列表项连起来组成列表
# 一、列表与列表项
## 定义列表和列表项
()
List_t 定义列表
ListItem_t定义列表项
## 初始化列表和列表项
()
vListInitialise初始化列表
vListInitialiseItem初始化列表项
如上图,初始化时需要取地址,要加地址符
## 给列表项赋值(ListItem1.xItemValue)
![在这里插入图片描述]()
插入列表项时是按列表项值得大小来插入的(由小到大)
## 打印列表和列表项地址
![在这里插入图片描述](?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oiR5LiObmFubw==,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述]()
pxIndex索引——列表索引完后地址一定指向xlistEnd
![在这里插入图片描述](?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oiR5LiObmFubw==,size_12,color_FFFFFF,t_70,g_se,x_16)
初始化列表项 xListEnd 的 pxNext 变量,因为此时列表只有一个列表项 xListEnd,因
此 pxNext 只能指向自身。
## 给列表插入列表项
```c
void vListInsert( List_t * const pxList,
ListItem_t * const pxNewListItem )
```
pxList: 列表项要插入的列表。
pxNewListItem: 要插入的列表项。
![在这里插入图片描述](?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oiR5LiObmFubw==,size_20,color_FFFFFF,t_70,g_se,x_16)
vListInsert(&TestList,&ListItem1);往TestList列表插入Listltem1列表项
![在这里插入图片描述]()
可以看到TestList地址由b0变成了列表项1的地址bc
![在这里插入图片描述](?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oiR5LiObmFubw==,size_17,color_FFFFFF,t_70,g_se,x_16)
pxNext向后指(由小到大)
pxPrevious向前指(由大到小)
![在这里插入图片描述](?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oiR5LiObmFubw==,size_20,color_FFFFFF,t_70,g_se,x_16)
## 列表项的删除
### 1.第一种方法
uxListRemove(&ListItem2); 删除列表项2
![在这里插入图片描述](?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oiR5LiObmFubw==,size_20,color_FFFFFF,t_70,g_se,x_16)
uxListRemove(&ListItem2); 列表项2的删除(只需要指定列表项即可,不需要指定列表,具有保存功能)
### 2.采用索引的方法删除
在末尾插入列表项
![在这里插入图片描述]()
相较于第一种较为复杂不过多的介绍了
## 末尾插入列表项
vListInsert()插入方式是由小到大插入
而vListInsertEnd插入要注意列表的 pxIndex 所指向的列表项
![在这里插入图片描述](?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oiR5LiObmFubw==,size_20,color_FFFFFF,t_70,g_se,x_16)
# 总结
列表与列表项的知识点不多但是过程很复杂,要注意vListInsert()插入方式是由小到大插入,ListInsertEnd插入要注意列表的 pxIndex 所指向的列表项,插入删除,定义,初始化要掌握。
|