目录
- 列表与列表项
- 相关API函数
列表与列表项
复制代码
1
2
3列表是FreeRTOS的一种数据结构,概念和数据结构与算法的链表相似。 跟踪FreeRTOS的任务可以用列表实现。
相关的结构体
复制代码
1
2
3
4
51 listFIRST_LIST_INTEGRITY_CHECK_VALUE :检查XXX类型校验值 5 listSECOND_LIST_INTEGRITY_CHECK_VALUE:检查XX类型校验值 1 5 是两种不一样的校验值 用于检查列表的完整性 需要把对应的宏置1 1 5 现在暂时用不到
重点讨论 234
复制代码
1
2
3
4
52 volatile UBaseType_t uxNumberOfItems; //记录列表中 中列表项的数量 3 ListItem_t * configLIST_VOLATILE pxIndex; //记录当前列表项索引号 用于遍历列表 4 MiniListItem_t xListEnd; //列表的最后一个列表项 4 MiniListItem_t :为变量类型 这是一个迷你列表项
列表的结构图
迷你列表项的结构体成员表变量
复制代码
1
2
3
4
51 listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE 这个不讨论 介绍列表有说过。 2 列表项的数量 :configLIST_VOLATILE TickType_t xItemValue; 3 指向下一个列表项 :struct xLIST_ITEM * configLIST_VOLATILE pxNext; 4 指向上一个列表项 struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;
列表项的结构图
相关API函数
复制代码
1
2相关的函数已经是封装好的 不用再次写 只需调用。
列表与列表项的关系
复制代码
1
2
3好比 学校就是列表 学校有细分了 一年级 二年级 三年级 一年级 二年级 三年级 就是列表项。
列表的初始化
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14List_t Testlist;定义一个列表 ListItem_t ListItem1;//定义三个列表项 ListItem_t ListItem2; ListItem_t ListItem3; //初始化 vListInitialise(&Testlist); vListInitialiseItem(&ListItem1); vListInitialiseItem(&ListItem2); vListInitialiseItem(&ListItem3); // 赋值 ListItem1.xItemValue = 40; ListItem2.xItemValue = 60; ListItem3.xItemValue = 50;
1 列表没有添加列表项的情况
复制代码
1
2
3
4
5
6
71 打印 他的头指针地址 &Testlist 2 打印 头指针的下一个元素 因为是 XXXX=0xfffff 所以不用取地址 (Testlist.pxIndex )直接访问他的变量就行了 3 因为没有列表项 end 只能自己指向自己 &(Testlist.xListEnd) 1 2 3 前面 多加 int 防止变成 其他类型的数据 我么实验要的是16进制的地址 所以要整形数据。
打印结果
复制代码
1
2
3
4列表与列表项并没关联 pxIndex的值 和listEnd 的值是相等的 因为根据图可知 没有列表项 listEND只能自己指自己。
1 列表添加列表项1 的情况
复制代码
1
2相当于 链表只有一个元素 形成环形的话 就很好判断 不管怎么 头指针的下一个永远是它 它的下一个就是listEND
添加 列表 项 2
不用慌 其实很容易看
复制代码
1
2
3
4
51 链表是环形的 想象一下环形结构 2 红色为第一次的(去的时候)因为是第一次参数 3 蓝色为第二次的 (回来的时候)因为是第二个参数 4 引出一个总结 去的时候是第一个 回来的时候是最后一个 因为 Pxnet的第一次是指向 40 pxPrevious第一次指向的是 60
复制代码
1
2
3
4只要保证 黄色框的对了 然后在和下面三组作对比 之前的第一个 到了第二次肯定在最 后面 然后下面的 pxNext的下一个 肯定是列表二 (因为列表项1 在黄色框的时候就是第一个 )所以中间就是listEND的地址了
添加 列表 项 3
复制代码
1
2
3
4先看红色 对着 代码的printf 一一个看 先打印 Pxnext 对着串口打印的两幅图 就能得出结果 还是一个理论 去的时候 是第一个 回来的时候就是最后一个。
删除 列表项2
复制代码
1
2相当于 只是没有列表项二 思路都是一样的
插入列表项 2
复制代码
1
2
3相当于 第一次 指向 list1 下一个就是 lsit2 lsit3就是最后一个 到了第二次 list3 就是第一个
复制代码
1
2
3
4Testlist.pxIndex=Testlist.pxIndex->pxNext; //改变索引 vListInsertEnd(&Testlist,&ListItem2);//初始化
大概思路 保证了 3是最后一个 也是第一个
复制代码
1
2
31>2>3>END END>3>1>2
最后
以上就是舒适早晨最近收集整理的关于FreeRTOS 列表与列表项 实验列表与列表项相关API函数的全部内容,更多相关FreeRTOS内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复