#每日话题# #有奖活动# #技术资源# # FreeRTOS操作系统学习
# 前言
列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来跟踪 FreeRTOS中的任务。与列表相关的全部东西都在文件 list.c 和 list.h 中。
列表项就是存放在列表中的项目,FreeRTOS 提供了两种列表项:列表项和迷你列表项。这两个都在文件 list.h 中有定义
列表项连起来组成列表
# 一、列表与列表项
## 定义列表和列表项
( )
List_t 定义列表
ListItem_t定义列表项
## 初始化列表和列表项
( )
vListInitialise初始化列表
vListInitialiseItem初始化列表项
如上图,初始化时需要取地址,要加地址符
## 给列表项赋值(ListItem1.xItemValue)

插入列表项时是按列表项值得大小来插入的(由小到大)
## 打印列表和列表项地址


pxIndex索引——列表索引完后地址一定指向xlistEnd

初始化列表项 xListEnd 的 pxNext 变量,因为此时列表只有一个列表项 xListEnd,因
此 pxNext 只能指向自身。
## 给列表插入列表项
```c
void vListInsert( List_t * const pxList,
ListItem_t * const pxNewListItem )
```
pxList: 列表项要插入的列表。
pxNewListItem: 要插入的列表项。

vListInsert(&TestList,&ListItem1);往TestList列表插入Listltem1列表项

可以看到TestList地址由b0变成了列表项1的地址bc

pxNext向后指(由小到大)
pxPrevious向前指(由大到小)

## 列表项的删除
### 1.第一种方法
uxListRemove(&ListItem2); 删除列表项2

uxListRemove(&ListItem2); 列表项2的删除(只需要指定列表项即可,不需要指定列表,具有保存功能)
### 2.采用索引的方法删除
在末尾插入列表项

相较于第一种较为复杂不过多的介绍了
## 末尾插入列表项
vListInsert()插入方式是由小到大插入
而vListInsertEnd插入要注意列表的 pxIndex 所指向的列表项

# 总结
列表与列表项的知识点不多但是过程很复杂,要注意vListInsert()插入方式是由小到大插入,ListInsertEnd插入要注意列表的 pxIndex 所指向的列表项,插入删除,定义,初始化要掌握。
|