打印

FreeRTOS操作系统——列表与列表项(四)

[复制链接]
740|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我于nano|  楼主 | 2022-7-26 22:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#每日话题# #有奖活动# #技术资源# # 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 所指向的列表项,插入删除,定义,初始化要掌握。


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

9

帖子

1

粉丝