生产者生产消息很快

消费者处理消息慢

生产者

设置

xQueueSend(xDataQueue,&ulValue,pdMS_TO_TICKS(200)); //如果队列满,最多等待200 Tick
等待参数队列满时行为适用情况
0立即失败数据允许丢弃、任务不能阻塞
有限Tick等待后超时一般业务任务
portMAX_DELAY一直等待数据绝对不能丢且允许长期阻塞

队列满后,Producer不会持续轮询,而是进入Blocked:

Producer:Running → Blocked
原因:等待队列出现空位

此时CPU可以运行:

  • Consumer;
  • 其他Ready任务;
  • Idle任务;
  • 中断。

所以队列满造成的是:

Producer任务阻塞

生产发送超时处理

if (xResult == pdPASS)
{
    /* 发送成功 */
}
else
{
    /* 超时,记录丢弃 */
}