#每日话题# #有奖活动# #技术资源# # 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 所指向的列表项,插入删除,定义,初始化要掌握。 
 
 
 |