Какой самый экономичный способ обработки очередей во FreeRTOS? - PullRequest
0 голосов
/ 18 марта 2020

Я работаю с FreeRTOS и использую 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 очередь ждет неопределенно долго, пока элемент очереди не станет доступным. Мой вопрос сейчас заключается в том, теряю ли я ценное время процессора в этом состоянии ожидания или это рекомендуемый способ сделать это. Если это не самый экономичный способ сделать это, какова альтернатива?

1 Ответ

1 голос
/ 18 марта 2020

у вас нет. это не опрос. Ваша задача переходит в заблокированное состояние и не «потребляет» процессорное время. Когда что-то поместит что-то в эту очередь, ваш статус задачи изменится на «ожидающий» или «работоспособный» и в конечном итоге будет выполнен.

...