ADC任务和流任务中的FreeRtos问题

时间:2018-05-25 10:19:08

标签: c freertos rtos

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

我发送一个整数,选择选择哪个ADC通道作为流媒体客户端的消息队列。

问题是我在发送adc通道整数时会出现队列溢出。

ADC TASK

$sql= 'SELECT * FROM '.$username.' ORDER BY data DESC';
  ?>
<!DOCTYPE html>
 <html>
    <head></head>
    <body>
<br/><br/>
 <div>
    <table align="center" width='100%' border=0>
        <tr bgcolor='#CCCCCC'>
            <td>Data</td>
            <td>Cantiere</td>
            <td>Pranzo</td>
            <td>Cena</td>
            <td>Hotel</td>
            <td>Macchina</td>
            <td>Note</td>
            <td>Edit/Delete</td>
        </tr>
        <?php 

         while($res = mysqli_fetch_array($result)) {         
            echo "<tr>";
            echo "<td>".$res['data']."</td>";
            echo "<td>".$res['cantiere']."</td>";
            echo "<td>".$res['pranzo']."</td>";
            echo "<td>".$res['cena']."</td>";
            echo "<td>".$res['hotel']."</td>";
            echo "<td>".$res['macchina']."</td>";    
            echo "<td>".$res['note']."</td>";
            echo "<td><a href=\"edit.php?id=$res[id]\">Edit</a> | <a 
 href=\"delete.php?id=$res[id]\" onClick=\"return confirm('Are you sure you 
want to delete?')\">Delete</a></td>";        
        }
        ?>
     </table>
 </div>

         </body>
 </html>

流式客户端任务

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

1 个答案:

答案 0 :(得分:0)

您似乎将队列完全状态视为错误,通常不会 - 队列的目的之一是对生产者施加压力,这正是您应该在此处执行的操作:如果是流式传输任务无法消化你投掷的数据,你只是生产太多。

当消费者代码中没有非活动(等待I / O)期间时,消费者的优先级仅有助于将队列填充状态保持在合理的水平。只要您的消费者有这样的等待时间,仅凭优先权并不能减轻您接受队列可能已满的等待。