OpenEdv-开源电子网

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

关于FREERTOS队列中的消息读取问题

[复制链接]

13

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2017-8-11
在线时间
94 小时
发表于 2020-2-26 17:00:59 | 显示全部楼层 |阅读模式
1金钱
新手,FreeRTOS实验13-1 FreeRTOS队列操作实验-HAL库版本。假如建立起来的队列有四个队列项目,在读之前往队列里发了四次消息,那么现在每个队列项目中都应该有消息。现在调用xQueueReceiveFromISR函数来读取消息,据教程上说这个函数读取完消息后会将消息删除。那么请问:如果只用xQueueReceiveFromISR读一次,那它是读取哪个队列项目里面的消息?
再问,读取完真的会将队列里面的这条消息删除吗,还是删除的是读取出来的缓存?

我仿真了好几遍,发现读取时队列里面的消息没有删除,而且读取时是从1-2-3-4这样的顺序往下读的,
读到第四次就是之前在读之前最后向队列发送的消息了,而且再读也不会变了。

除非再次向队列发送一次消息,假如只发一次,第五次发的消息将会覆盖第一次的消息,而这个时候再用
xQueueReceiveFromISR读的话,就是第五次发的消息(第一个队列项目),再读也不会变。

假如一直不读取,然后第六次发送消息,第六次发的消息将会覆盖第二次的消息,第七次发的消息将会覆盖第三次的消息,第八次发的消息将会覆盖第四次的消息,
假如此时开始读取,读取一次是读取的第六次发的消息(第二个队列项目),再读是读取的第七次发的消息(第三个队列项目),
再读是读取的第八次发的消息(第四个队列项目)。。。。。。

感觉队列里面的消息不是向教程里说的像一个队似的,读取一个出来一个。而是一个环形的数据链,不断地覆盖,指针不断地移动。

那么教程里说的xQueueReceiveFromISR读取完会将队列删除到底是怎么回事,如何删除的?请高手指点一下。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2017-8-11
在线时间
94 小时
 楼主| 发表于 2020-2-26 17:07:13 | 显示全部楼层
少打字了:那么教程里说的xQueueReceiveFromISR读取完会将队列里面的消息删除到底是怎么回事,如何删除的?请高手指点一下。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-21 01:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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