中级会员
 
- 积分
- 359
- 金钱
- 359
- 注册时间
- 2017-8-11
- 在线时间
- 94 小时
|
1金钱
新手,FreeRTOS实验13-1 FreeRTOS队列操作实验-HAL库版本。假如建立起来的队列有四个队列项目,在读之前往队列里发了四次消息,那么现在每个队列项目中都应该有消息。现在调用xQueueReceiveFromISR函数来读取消息,据教程上说这个函数读取完消息后会将消息删除。那么请问:如果只用xQueueReceiveFromISR读一次,那它是读取哪个队列项目里面的消息?
再问,读取完真的会将队列里面的这条消息删除吗,还是删除的是读取出来的缓存?
我仿真了好几遍,发现读取时队列里面的消息没有删除,而且读取时是从1-2-3-4这样的顺序往下读的,
读到第四次就是之前在读之前最后向队列发送的消息了,而且再读也不会变了。
除非再次向队列发送一次消息,假如只发一次,第五次发的消息将会覆盖第一次的消息,而这个时候再用
xQueueReceiveFromISR读的话,就是第五次发的消息(第一个队列项目),再读也不会变。
假如一直不读取,然后第六次发送消息,第六次发的消息将会覆盖第二次的消息,第七次发的消息将会覆盖第三次的消息,第八次发的消息将会覆盖第四次的消息,
假如此时开始读取,读取一次是读取的第六次发的消息(第二个队列项目),再读是读取的第七次发的消息(第三个队列项目),
再读是读取的第八次发的消息(第四个队列项目)。。。。。。
感觉队列里面的消息不是向教程里说的像一个队似的,读取一个出来一个。而是一个环形的数据链,不断地覆盖,指针不断地移动。
那么教程里说的xQueueReceiveFromISR读取完会将队列删除到底是怎么回事,如何删除的?请高手指点一下。
|
|