Freertos--把队列加入队列集
队列集的本质也是队列,只不过里面存放的是“队列句柄”。使用过程如下:
- 创建队列A,它的长度是n1
- 创建队列B,它的长度是n2
- 创建队列集S,它的长度是“n1+n2”
- 把队列A、B加入队列集S
- 这样,写队列A的时候,会顺便把队列A的句柄写入队列集S
- 这样,写队列B的时候,会顺便把队列B的句柄写入队列集S
- InputTask先读取队列集S,它的返回值是一个队列句柄,这样就可以知道哪个队列有有数据了;然后InputTask再读取这个队列句柄得到数据
FreeRTOS 中队列集:
一、xQueueAddToSet(加入队列集):
参数是传入队列(句柄),队列通过 xQueueAddToSet 加入队列集时,FreeRTOS 会在内部维护一个队列列表(通常是一个链表或数组结构),按照加入的顺序存储队列句柄。
我们需要了解 FreeRTOS 的队列集实现,特别是 xQueueSelectFromSet 如何选择就绪队列。
二、xQueueSelectFromSet(选择就绪队列):
xQueueSelectFromSet 在选择就绪队列时,会按照加入队列集的顺序遍历队列列表,检查每个队列的状态。
具体来说:
它从队列集的第一个成员(最先加入的队列)开始,检查是否就绪(例如,是否有数据可读)。
如果第一个队列就绪,返回其句handle。
如果第一个队列未就绪,继续检查下一个队列,直到找到一个就绪队列,或者遍历完所有队列。
MPU6050为例
一、首先在MX_FREERTOS_Init里面初始化,创建队列(g_xQueueMPU6050)
二、然后会在自己的(mpu6050)文件中去把数据放到队列(g_xQueueMPU6050)
三、再创建队列集,读取到句柄,将句柄写入到队列集
以后,在选择就绪队列时,xQueueSelectFromSet会按照加入队列集的顺序遍历队列列表,检查每个队列的状态。
接下来xQueueSelectFromSet函数来处理队列集,检查每个队列的状态。队列就绪,返回其句handle。
接下来就执行函数了:
最后放入最终的队列g_xQueuePlatform