Por quanto tempo uma tarefa do FreeRTOS deve ser adiada em cada loop?

7

Estou trabalhando em um projeto da AWS IoT em que as rotinas do MQTT, as lambdas de retorno de chamada e todo o resto, além da inicialização, estão dentro de uma tarefa criada por xTaskCreatePinnedToCore().

Esta tarefa faz algumas coisas: Ligue para a AWS, inscreva-se tópicos e, em seguida, ele entra em um loop infinito, onde ele chama aws_iot_mqtt_yieldverifica erros etc. Em cada loop Apelo também: vTaskDelay(10 / portTICK_RATE_MS);. É de um projeto de exemplo em que o atraso foi de 1 segundo, que diminui para 10ms. O que é um atraso 'saudável'? Por que precisamos de um atraso aqui? Obrigado!

haxpanel
fonte

Respostas:

7

Você não precisa de um atraso, ou pelo menos um que não acorde.

Se, como você sugere, você iniciou um encadeamento que é acionado por um retorno de chamada, não há necessidade de um loop principal. A menos que esse loop esteja fazendo algo útil toda vez que for executado, ele estará usando o tempo da CPU e a energia elétrica toda vez que acordar e voltar a atrasar.

Eu definiria um atraso do valor inteiro máximo para atrasar efetivamente para sempre ou simplesmente encerraria esse segmento.

Se houver algo útil no loop, o atraso sensível dependerá inteiramente do que é essa coisa.

Chenmunka
fonte