在 FreeRTOS 中处理队列最经济的方法是什么?

What is the most economical way to handle queues in FreeRTOS?

我正在使用 FreeRTOS and I am using xQueueReceive() 在我使用 xTaskCreate() 创建的任务中工作。该任务只处理接收到的网络数据包。这是任务的实现:

while(1) {
    if(sys_link_recv_queue != NULL) {
        mb32_packet_t packet;
        if(xQueueReceive(sys_link_recv_queue, &packet, portMAX_DELAY)==pdPASS) {
            // process packet ...
        }
    }
}

使用 portMAX_DELAY 时,队列会无限期地等待,直到队列项可用。我现在的问题是,我是否会在此等待状态期间失去宝贵的 CPU 时间,或者这是否是推荐的做法。如果这不是最经济的方法,还有什么替代方法?

你没有。它不是轮询。您的任务将进入阻塞状态,不会 "consume" 任何 CPU 次。当某物将某物放入该队列时,您的任务状态将更改为 "waiting" 或 "runnable" 并最终执行。