c - ADC 任务和流式任务中的 FreeRtos 问题
问题描述
我有一个使用 4 个通道并使用 DMA 进行传输的 ADC 任务我还有一个流式客户端,它通过 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;
}
解决方案
您似乎将队列已满状态作为错误处理,通常情况下不会 - 队列的目的之一是向生产者施加压力,而这正是您应该在这里做的:如果流式传输任务无法消化你扔给它的数据,你只是生产了太多。
只有当消费者代码中没有非活动(等待 I/O)周期时,消费者的优先级才有助于将队列填充状态保持在合理的水平。一旦您的消费者有这样的等待期,单靠优先级并不能让您免于接受队列可能已满。
推荐阅读
- mysql - 是什么导致 IntegrityError '无法添加外键约束'?
- laravel-5 - Add array data to in vue without loosing old data
- ruby-on-rails - ruby on rails 中未定义的方法“unserialize_attribute”
- python - 从组合字典创建一个双向表
- c# - 访问本地安全 WCF 服务返回错误 HTTP 错误 403.16 - 禁止
- javascript - 图像发送 - 套接字 C++ 服务器/Javascript 客户端
- python - 如何在 python 中“展平”张量积矩阵?
- javascript - GEOjson 未显示在我的地图 openlayers 中
- node.js - 访问 Amazon Alexa 控制台 console.log() 内容
- google-apps-script - 脚本仍在运行时无法让谷歌表格显示所选范围