在 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" 并最终执行。
我正在使用 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" 并最终执行。