首页 > 解决方案 > 在 FreeRTOS 中处理队列最经济的方法是什么?

问题描述

我正在使用FreeRTOS 并且在使用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 时间,或者这是否是推荐的方法。如果这不是最经济的方式,还有什么替代方案?

标签: cfreertos

解决方案


你不。它不是轮询。您的任务将进入阻塞状态,并且不会“消耗”任何 CPU 时间。当某物将某物放入该队列时,您的任务状态将更改为“等待”或“可运行”并最终执行。


推荐阅读