176_FreeRTOS多来源的队列使用

         这个功能其实我个人倒是觉得跟基础的队列使用的例子差不多,唯一的区别仅仅是数据结构发生了变化,内容发生了变化。唯一值得我关注的或者说是我想深究的其实还不在这里,而是在于任务优先级的变化。因为我觉得OS里面最让人感觉到需要弄明白的其实是调度器,其实是内在的调度机制。

         先看一下例程代码:

176_FreeRTOS多来源的队列使用

         创建了3个task,而3个task中接收的task优先级这次是最低的。两个发送的Task其实是使用了同一个函数。

176_FreeRTOS多来源的队列使用

         考虑到优先级因素,其实这2个task应该是交替进入阻塞状态,然后交替进入到ready状态。直到队列的空间全都满了,然后进入到消息等等待阻塞。这个时候,接收的task应该会被**。

176_FreeRTOS多来源的队列使用

         这里面的注释中其实有一个很好的解释,开始我还好奇为什么是3而不是5,这个例程中的队列深度改成了3我开始没有注意到。由于接收是没有什么停顿的,因此这里只要发送任务还没有**就会一直接收完。自然,时间参数上应该也有一个平衡点。

         我觉得这个功能可以用来实现我的CAN通信中的很多协议栈的消息处理,接下来我也会尝试做一下这个实现。