太和县建设局网站,伪静态 多个网站,名字做头诗的网站,小游戏大全网页版本节需要掌握以下内容#xff1a;
1#xff0c;列表和列表项的简介#xff08;熟悉#xff09;
2#xff0c;列表相关API函数介绍#xff08;掌握#xff09;
3#xff0c;列表项的插入和删除实验#xff08;掌握#xff09;
4#xff0c;课堂总结#xff08;掌…本节需要掌握以下内容
1列表和列表项的简介熟悉
2列表相关API函数介绍掌握
3列表项的插入和删除实验掌握
4课堂总结掌握
一列表和列表项的简介熟悉
1.1 列表
列表是 FreeRTOS 中的一个数据结构概念上和链表有点类似列表被用来跟踪 FreeRTOS中的任务列表项就是存放在列表中的项目 列表相当于链表列表项相当于节点FreeRTOS 中的列表是一个双向环形链表
列表的特点列表项间的地址非连续的是人为的连接到一起的。列表项的数目是由后期添加的个数决定的随时可以改变
数组的特点数组成员地址是连续的数组在最初确定了成员数量后期无法改变
在OS中任务的数量是不确定的并且任务状态是会发生改变的所以非常适用列表(链表)这种数据结构
举个例子 有关于列表的东西均在文件 list.c 和 list.h 中首先我们先看下在list.h中的列表相关结构体 1、在该结构体中 包含了两个宏这两个宏是确定的已知常量 FreeRTOS通过检查这两个常量的值来判断列表的数据在程序运行过程中是否遭到破坏 该功能一般用于调试 默认是不开启的
2、成员uxNumberOfItems用于记录列表中列表项的个数不包含 xListEnd
3、成员 pxIndex 用于指向列表中的某个列表项一般用于遍历列表中的所有列表项
4、成员变量 xListEnd 是一个迷你列表项排在最末尾
列表结构示意图 1.2 列表项
列表项是列表中用于存放数据的地方在 list.h 文件中有列表项的相关结构体定义 1、成员变量 xItemValue 为列表项的值这个值多用于按升序对列表中的列表项进行排序 2、成员变量 pxNext 和 pxPrevious 分别用于指向列表中列表项的下一个列表项和上一个列表项
3、成员变量 pxOwner 用于指向包含列表项的对象通常是任务控制块
4、成员变量 pxContainer 用于指向列表项所在列表。
列表项结构示意图 1.3 迷你列表项 1、成员变量 xItemValue 为列表项的值这个值多用于按升序对列表中的列表项进行排序
2、成员变量 pxNext 和 pxPrevious 分别用于指向列表中列表项的下一个列表项和上一个列表项
3、迷你列表项只用于标记列表的末尾和挂载其他插入列表中的列表项因此不需要成员变量 pxOwner 和 pxContainer以节省内存开销
迷你列表项结构示意图 1.4 列表和列表项的关系 二列表相关API函数介绍掌握 函数 描述 vListInitialise() 初始化列表 vListInitialiseItem() 初始化列表项 vListInsertEnd() 列表末尾插入列表项 vListInsert() 列表插入列表项 uxListRemove() 列表移除列表项
参考文档《FreeRTOS开发指南》第七章 ——“FreeRTOS列表和列表项”
2.1 初始化列表vListInitialise 形参 描述 pxList 待初始化列表 初始化后列表结构 2.2 函数 vListInitialiseItem() 形参 描述 pxItem 待初始化列表项 初始化后的列表项结构 2.3 函数vListInsert() void vListInsert ( List_t * const pxList , ListItem_t * const pxNewListItem )
此函数用于将待插入列表的列表项按照列表项值升序进行排序有序地插入到列表中 形参 描述 pxList 列表 pxNewListItem 待插入列表项
代码详解查看手册《FreeRTOS开发指南》第七章 ——“FreeRTOS列表和列表项” 插入值为40的列表项 将列表项xList_Item1插入列表List中
插入值为60的列表项
在前面的基础上在插入值为60的列表项结果如下 插入值为50的列表项
在前面的基础上在插入值为50的列表项结果如下 总结函数vListInsert()是将待插入列表的列表项按照列表项值升序进行排序有序地插入到列表中
2.4 函数 vListInsertEnd() 形参 描述 pxList 列表 pxNewListItem 待插入列表项 此函数用于将待插入列表的列表项插入到列表 pxIndex 指针指向的列表项前面是一种无序的插入方法
列表项末尾插入图示
假设默认列表如下 此时插入值为30的列表项2结果如何 明天再更困了想睡觉