本次学习章节需要掌握的内容
1:列表和列表项的简介(熟悉) |
2:列表相关API函数(掌握) |
3:列表项的插入和删除实验(掌握) -----> 复习列表的知识 |
4:课堂总结(掌握) |
列表和列表项的简介(熟悉)
学习本次内容建议先复习数据结构有关列表相关部分的知识(文章如下所示)-->本人学习过往总结
C语言线性表的实现(详解)_c语言线性表实现-CSDN博客文章浏览阅读724次,点赞9次,收藏9次。 除去a0和an外的其他元素ai,既有前驱也有后继线性表可以逐项访问的顺序存取。1: 动态的内存增加,将存放数据的内存放到堆上(堆的内存空间比较大,不容易发生溢出)a0是线性表的第一个元素,只有一个后继,an为线性表的最后一个元素,只有一个前驱。2: 动态数组,如果是5个元素,申请内存,拷贝数据,释放内存,插入第7个数据?1: 当插入一个新的元素时,发现内存空间不足申请一块更大的内存空间。 2:数据元素的个数是有限的, 3:数据元素的类型是相同的。4: 把元素放入新的空间。_c语言线性表实现https://blog.csdn.net/qq_45973003/article/details/134629104C语言线性表的链式存储(详解)_c语言设计线性链表存储结构-CSDN博客文章浏览阅读481次,点赞9次,收藏9次。3:链表是由一系列的节点组成,每个节点包含两个域,一个是数据域,一个是指针域。链表是由一系列的节点组成,每个节点包含两个域,一个是数据域,一个是指针域。1:插入新元素,空间不足申请更大的内存空间。1:线性表的顺序存储:用一块连续的内存空间。线性表的顺序存储:用一块连续的内存空间。2:线性表的链式存储:不连续的内存空间。2:数据结构是算法需要处理问题的载体。《如果最高次项的乘数不是1,就舍去》线性表的链式存储:不连续的内存空间。2:旧的空间的数据拷贝到新的空间。1:算法是为了解决问题二设计的。_c语言设计线性链表存储结构
https://blog.csdn.net/qq_45973003/article/details/134630120企业级开发链表思路-CSDN博客文章浏览阅读384次,点赞9次,收藏7次。【代码】企业级开发链表思路。
https://blog.csdn.net/qq_45973003/article/details/134674909循环单向链表(详解)-CSDN博客文章浏览阅读724次,点赞8次,收藏8次。【代码】循环单向链表(详解)
https://blog.csdn.net/qq_45973003/article/details/134741353循环单向链表(详解)-CSDN博客文章浏览阅读724次,点赞8次,收藏8次。【代码】循环单向链表(详解)
https://blog.csdn.net/qq_45973003/article/details/134741353栈顺序存储的实现(详解)_栈的顺序实现-CSDN博客文章浏览阅读507次,点赞6次,收藏10次。_栈的顺序实现
https://blog.csdn.net/qq_45973003/article/details/134755871栈的链式存储(详解)-CSDN博客文章浏览阅读912次,点赞10次,收藏11次。链式存储的栈操作灵活,但由于每个节点需要额外的指针空间,可能会占用更多的内存。另外,由于链式存储的特性,访问栈中特定位置的元素可能需要遍历整个链表,导致性能略低于顺序存储。栈的链式存储是通过链表来实现的,每个节点包含一个元素和一个指向下一个节点的指针。链式存储的栈不需要提前分配内存空间,可以动态地增加或减少元素。在链式存储中,栈顶元素通常是链表的头节点,栈底元素是链表的末尾节点。_栈的链式存储
https://blog.csdn.net/qq_45973003/article/details/134765939队列顺序存储(详解)_用于存放顺序队列中元素-CSDN博客文章浏览阅读500次,点赞9次,收藏8次。【代码】队列顺序存储(详解)_用于存放顺序队列中元素
https://blog.csdn.net/qq_45973003/article/details/134766985
def:列表是FreeRTOS中的数据结构,概念和C语言中的链表有点类似,列表被用来跟踪FreeRTOS中的任务
列表示意图如下所示
def:列表项是存放在列表中的项目(在FreeRTOS中也就相当于是一个个任务)
列表项属于是列表的子集(列表项就是链表,列表项就是列表的节点)以下表示的是环形的链表,有单向循环链表,有双向循环链表,(列表项的理解示意图如下所示)。
1:列表(本质上相当于是链表),列表项相当于是节点,FreeRTOS中的列表是一个双向环形链表(这个环形是一个比较重要的概念也就相当于是一个360度连接的状态)
2:列表(本质上相当于是链表),列表项相当于是节点,FreeRTOS中的列表是一个双向环形链表
链表是可以随意删除它的列表项的,也可以加入列表项(相当于链表中的插入和删除元素)
- 列表的特点:列表项间的地址是非连续的,是人为连接到一起的,列表项的数目是由后期添加的个数决定的,随时可以改变
- 数组的特点:数组成员的地址是连续的,数组在最初确定成员数量后期无法改变
注:在OS中任务的数量是不确定的,并且任务的状态随时会发生改变,所以非常适合列表的使用
列表和列表项简介(熟悉)
有关列表项的东西均包含在list.c文件和list.h文件中,首先我们先看下在list.h中的,列表相关结构体 (这两个文件包含在FreeRTOS的配置文件中)
【在这个结构体中:包含了两个宏(校验值),这两个宏是已经确定的常量,FreeRTOS通 过检查这两个常量的值来判断列表 的数据在程序运行的过程中,是否遭到破坏,该功能一般 用于调试, 默认不开启】
【第二个成员uxNumberOfltems,用于记录检查列表项个数(不包含xListEnd】
【第三个成员pxlndex,用于指向列表中的某个列表项,一般用于遍历列表中的所有列表项】
【第四个成员xListEnd,是一个迷你列表项,排在最末尾】
列表结构示意图(如下所示)
【列表项的结构体成员】
def 1: 列表项是列表中用于存放数据的地方,在list文件中,【在list.h中有列表项相关结构体定义】
【listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE 用于检测列表项的数据完整性(目前没有使用)】
【listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE 用于检测列表项的数据完整性(目前没有使用)】
成员变量的讲解
def:
1: configLIST_vOLATILE TickType_t 【xltemValue】 是列表项的值,这个值用于按升序对列表中的列表项进行排序
2:struct xLIST_ITEM* configLIST_VOLATILE 【pxNext】 和 【pxPrevious】表示指向上一个列表项和下一个列表项
3: void * pvOwner【列表项的拥有者】用于指向我们的任务控制块(也就是包含列表项的对象)
4:struct xLIST* configLIST_VOLATILE pxContainer;【列表项所在列表】(用于指向列列表项所在的列表)
【迷你列表项】
def:迷你列表项仅仅是用于标记列表的末尾和挂载其他插入列表的列表项
相关参数
【对于挂载这个含义的理解】------> 可以理解为在列表中插入参数
【迷你列表项示意图】
【列表和列表项之间的关系】
这相当于是数据结构中的循环链表(一个个的相互连接然后头部和尾部也是相互贯通的),相当于有数据指针的指向
列表相关API函数(掌握)
以下是列表的使用以及对列表插入删除的理解(不作为代码编写的示例,可以用作一个参考)
列表插入参数值演示
下图是我对这张图的理解
important【函数vListInsert()是将待插入列表的列表项按照列表项的值进行升序排序,有序的插入到列表中】
【列表项插入函数】
【列表项删除函数】
【列表项删除演示】
注:【重要】
【函数vListInsert()是将待插入列表的列表项按照列表项的值进行升序排序,有序的插入到列表中】
3:列表项的插入和删除实验(掌握) -----> 复习列表的知识
【def:创建3个任务,一个是start_task,一个时候task1,一个是task2】
任务功能如下:
1: start_task 用来创建其他的两个任务
2: task1 实现led灯每500ms闪烁一次,用来提示系统正在运行
3: task2 调用列表和列表项相关的API函数,并通过串口输出相应信息,进行观察
【初始化列表相关API函数】
.....................后面继续更新
4:课堂总结(掌握)