我有一个ADC任务,它使用4个通道,使用DMA进行传输,我还有一个流客户端,它通过TCP套接字来流ADC数据,使ADS任务的优先级低于流客户端。
我正在向流客户端发送一个整数,该整数选择选择哪个ADC通道作为消息队列。
问题是,当发送adc通道整数时,队列溢出。
ADC任务
if(bufferSelect != BUFFERS_NOT_READY)
{
if(xQueueSend(g_adcQueue, &bufferSelect, 0) != pdPASS)
{
throwError(ERROR_MESSAGE_QUEUE_FULL);
PRINTF("%s\r\n", getErrorMessage(ERROR_MESSAGE_QUEUE_FULL));
}
bufferSelect = BUFFERS_NOT_READY;
}流客户端任务
/* obtain next buffer ready event */
if(xQueueReceive(g_adcQueue, &bufferSelect, 0) == pdFALSE)
{
g_stopStreaming = true;
continue;
}发布于 2018-05-25 10:59:33
您似乎将队列完整状态处理为一个错误,而它通常不是--队列的目的之一是向生成程序施压--这正是您在这里应该做的:如果流任务无法消化您向其抛出的数据,那么您就产生了太多的数据。
当使用者代码中没有非活动(等待I/O)周期时,使用者的优先级只会帮助将队列填充状态保持在合理的水平。一旦消费者有了这样的等待期,单凭优先级并不能帮助您接受队列会变得满的事实。
https://stackoverflow.com/questions/50526928
复制相似问题