1334_FreeRTOS中xQueuePeek函数的实现分析

全部学习汇总: GitHub - GreyZhang/g_FreeRTOS: learning notes about FreeRTOS.

近段时间把FreeRTOS中队列的部分基本上常用的接口全都看完了,接下来把漏网之鱼也都逐个看一下。今天看一下xQueuePeek的实现。代码我已经看完了一遍,从功能设计上感觉跟队列接收的接口差不多,不同点可能是在于数据拷贝之后读取锚点做了修改,这样可能达到一个效果:只读取数据,但是不减少队列的元素个数。

从接口形式上看,跟队列的接收接口其实是很相似的。这里做了一个检查,保证调度器不能够挂起的时候进行等待处理。

接下来的处理结构看起来跟队列的接收接口也是十分相似的,但是从这部分的信息处理能够看得出来这个接口跟队列接收接口功能上的不同点:不会进行队列消息的移除。

这是队列不为空的时候的处理,拷贝完数据之后,激活等待的任务,之后返回成功的返回码。

如果队列为空,那么需要看是否需要等待,根据不同的处理情况进行不同的处理。如果不等待,那么直接返回队列为空的返回码。如果需要等待,那么处理相应的任务事件链表之后标注接下来需要进行等待的处理。

挂起调度器,之后锁定队列。如果还没有超时,那么看队列中是否有消息存在,以此判断是否等到了事件的发生。如果没等到,那么继续等。如果等到了,那么恢复调度接下来进行相应消息的处理。

超时处理的部分跟普通的队列接收接口是相似的,同时也加了一个防御式编程的处理。从设计的意图上来说,其实就是看等待超时发生了且没有消息到直接返回队列为空即可。

以上就是xQueuePeek接口的实现,从这个接口的实现可以联想到一个专用的场景:如果一个队列需要激活多个任务,那么完全可以采用这个接口辅助实现相关的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值