本篇主要分析向队列中发送消息 xQueueGenericSend 这个函数。
大致分为两个逻辑:
1、当队列没满的时候的处理
2、当队列没满的时候的处理
主意:整个xQueueGenericSend是在for(;;)中处理的
一、队列没满的case
队列的数据结构图可参考:FreeRtos Queue (一)
prvCopyDataToQueue
队列没满的时候会调prvCopyDataToQueue这个接口向队列中写入数据:
以上写入队列的分析可参考 FreeRtos Queue (一)中的数据结构图。
xTaskRemoveFromEventList
将消息写入队列后,需要判断是不是有队列因为读队列中的消息没读到而进入阻塞状态的任务,主要是先判断xTasksWaitingToReceive链表是否为空然后在xTaskRemoveFromEventList这个函数中处理的
以上队列没满的场景就分析结束了。