¿Cuánto tiempo debe retrasarse una tarea FreeRTOS en cada ciclo?

7

Estoy trabajando en un proyecto de AWS IoT donde las rutinas MQTT, las llamadas de retorno de llamada y todo lo demás, aparte de la inicialización, están dentro de una tarea creada por xTaskCreatePinnedToCore().

Esta tarea hace algunas cosas: conecte a AWS, suscribirse a los temas y luego se entra en un bucle infinito en el que llama aws_iot_mqtt_yieldcomprueba los errores etc. En cada bucle También llamo: vTaskDelay(10 / portTICK_RATE_MS);. Es de un proyecto de ejemplo donde el retraso fue de 1 segundo que luego disminuí a 10 ms. ¿Qué es un retraso "saludable"? ¿Por qué necesitamos un retraso aquí? ¡Gracias!

haxpanel
fuente

Respuestas:

7

No deberías necesitar un retraso, o al menos no uno que siga despertando.

Si, como sugiere, ha iniciado un subproceso que se desencadena por una devolución de llamada, entonces no hay necesidad de un bucle principal. A menos que ese ciclo esté haciendo algo útil cada vez que se ejecute, solo está usando tiempo de CPU y energía eléctrica cada vez que se activa y vuelve a entrar.

O bien establecería un retraso del valor entero máximo, para retrasar efectivamente para siempre, o simplemente terminar ese hilo.

Si hay algo útil en el bucle, entonces el retraso sensible dependerá completamente de lo que ese algo es.

Chenmunka
fuente