OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5953|回复: 7

FreeRTOS列表与列表项中末尾插入列表项的问题

[复制链接]

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2019-5-5
在线时间
16 小时
发表于 2019-10-28 09:38:25 | 显示全部楼层 |阅读模式
5金钱
各位老铁,最近在学习FreeRTOS的过程中遇到了如下问题:
在使用vListInsertEnd()函数进行列表项的插入操作时,官方的操作是这样说的,

然后实际我在测试的过程中,没有对pxIndex进行调整,然后得到的结果如下,

我想问一下,为什么一定要调整pxIndex的位置,不调整的话,整个列表的逻辑也没有不合理的地方啊 ,
其次,如果FreeRTOS官方要求这么做,为什么不把调整pxIndex指针指向这个操作放到API函数里面执行?

原子官方描述

原子官方描述

没有调整pxIndex时的情况

没有调整pxIndex时的情况

最佳答案

查看完整内容[请看2#楼]

首先要明确列表中pxIndex的作用。pxIndex是用来记录当前列表项的索引号,用于遍历列表。既然是遍历作用,当然是会变化的。 而vListInsertEnd( )是往列表的末尾添加列表项。而又因为列表中的成员变量xListEnd是用来表示列表的末尾,所以容易理解成函数vListInsertEnd( )是往xListEnd的前面或者后面添加列表项。 但是实际上是根据pxIndex来确定列表的末尾。前面说过pxIndex是用来遍历列表的,则pxIndex所指向的列表项就是要遍历的 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
332
金钱
332
注册时间
2016-11-3
在线时间
49 小时
发表于 2019-10-28 09:38:26 | 显示全部楼层
首先要明确列表中pxIndex的作用。pxIndex是用来记录当前列表项的索引号,用于遍历列表。既然是遍历作用,当然是会变化的。
而vListInsertEnd( )是往列表的末尾添加列表项。而又因为列表中的成员变量xListEnd是用来表示列表的末尾,所以容易理解成函数vListInsertEnd( )是往xListEnd的前面或者后面添加列表项。
但是实际上是根据pxIndex来确定列表的末尾。前面说过pxIndex是用来遍历列表的,则pxIndex所指向的列表项就是要遍历的开始列表项,也就是pxIndex所指向的列表项是列表头,又因为列表时环形的,所以新的列表项就会插入pxIndex所指向的列表项的前面。
从你所发的图一可以看出,下面特意说明了当前pxIndex所指向的是ListItem1而不是xListEnd,然后你再看手册中下一图调用函数vListInsertEnd( )在末尾插入列表项,就可以看出新的项是插入到ListItem1的前面,而不是xListEnd的前面。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2019-10-29 02:55:29 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2019-11-27
在线时间
27 小时
发表于 2020-4-6 00:48:45 | 显示全部楼层
帮顶,希望大牛解答
回复

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2019-11-27
在线时间
27 小时
发表于 2020-4-6 00:49:21 | 显示全部楼层
帮顶,希望大牛解答
回复

使用道具 举报

4

主题

82

帖子

0

精华

高级会员

Rank: 4

积分
743
金钱
743
注册时间
2018-9-1
在线时间
177 小时
发表于 2020-4-7 18:07:53 | 显示全部楼层
是理解错了吧。
vListInsertEnd()这个API函数不会修改pxIndex,在初始化它指向xListEnd。
API外的用户代码也没有修改它。
但其它API函数会修改pxIndex。
图一只不过是程序运行一段后,执行了某些会修改pxIndex的API函数后的一个list状态,仅作为例子,并没说说是指初始状态。
uevip#126.com
回复

使用道具 举报

4

主题

82

帖子

0

精华

高级会员

Rank: 4

积分
743
金钱
743
注册时间
2018-9-1
在线时间
177 小时
发表于 2020-4-7 19:13:45 | 显示全部楼层
图看的真糟心。。。

下边这种不香吗?
捕获.PNG
uevip#126.com
回复

使用道具 举报

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
金钱
278
注册时间
2019-2-19
在线时间
74 小时
发表于 2020-11-29 20:59:08 | 显示全部楼层
pxIndex初始化就指列表的End,虽然前面2/1/3等操作了这么多次,但是pxIndex自始至终没移动过,还是在End位置。不信你操作一次都打印pxIndex出来看。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 20:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表