gpt4 book ai didi

c - FreeRtos在ADC任务和Streaming任务中的问题

转载 作者:行者123 更新时间:2023-11-30 16:31:32 24 4
gpt4 key购买 nike

我有一个使用 4 个 channel 并使用 DMA 进行传输的 ADC 任务。我还有一个流客户端,它通过 TCP 套接字流式传输 ADC 数据。我使 ADS 任务的优先级低于流客户端。

我正在发送一个整数,用于选择选择哪个 ADC channel 作为消息队列到流客户端。

问题是我在发送该 adc channel 整数时出现队列溢出。

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;
}

最佳答案

您似乎将队列满状态处理为错误,而通常情况下并非如此 - 队列的目的之一是对生产者施加背压,而这正是您应该在此处执行的操作:如果流任务无法消化您扔给它的数据,您只是产生了太多数据。

当消费者代码中没有不活动(等待 I/O)周期时,消费者的优先级仅有助于将队列填充状态保持在合理的水平。一旦您的消费者有这样的等待期,仅凭优先级并不能免除您接受队列可能已满的事实。

关于c - FreeRtos在ADC任务和Streaming任务中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50526928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com