177_FreeRTOS使用队列组

         翻译成队列组不知道是否合适,直观的翻译应该是队列集合。主要的作用就是能够让一个Task接收的消息可以来自于不同类型以及大小的队列,当然也可以是相同类型以及大小。这个我没有考虑到我自己的应用中什么时候会用到,简单分析一下官方的示范代码。

177_FreeRTOS使用队列组

         首先是创建两个队列,一个队列组,队列的大小都是1。把两个队列添加到这个队列组中。接下来,创建了3个Task,从代码直白表达上,两个低优先级的Task用来发送信号,而高优先级的用来接收两个任务发出的信号。这样,调度器启动后应该是从接收任务开始执行。

         再看一下任务的设计。

177_FreeRTOS使用队列组

         两个任务都是阻塞型任务,其实有了队列的发送动作已经算是阻塞了。不过,这里的差异在于这个阻塞应该能够改变两个任务的发送速度。单纯从发送的任务设计看,似乎与一般的队列发送没什么太大的差异,唯一的差异是这次发送的是俩队列。

 

177_FreeRTOS使用队列组

         再看一下接收,与之前单个队列的处理不同,接收的时候首先进行了一个选择,从注释看其实这个就已经完成了一个阻塞的操作了。如果这个阻塞被解除,则意味着可以从某个队列接收消息了。之后,接收消息的动作将使得发送的Task解除发送相关的阻塞。

         看一下运行效果:

177_FreeRTOS使用队列组

         确实是看得出两倍的发送速度差异。