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 所指向的列表项,插入删除,定义,初始化要掌握。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值