Wie lange sollte eine FreeRTOS-Aufgabe in jeder Schleife verzögert werden?


7

Ich arbeite an einem AWS IoT-Projekt, bei dem sich die MQTT-Routinen, Rückruf-Lambdas und alles andere außer der Initialisierung in einer von erstellten Aufgabe befinden xTaskCreatePinnedToCore().

Diese Aufgabe erledigt einige Dinge: Stellen Sie eine Verbindung zu AWS her, abonnieren Sie Themen und treten Sie dann in eine Endlosschleife ein, in der aws_iot_mqtt_yieldFehlerprüfungen usw. aufgerufen werden vTaskDelay(10 / portTICK_RATE_MS);. In jeder Schleife rufe ich außerdem auf : . Es ist aus einem Beispielprojekt, in dem die Verzögerung 1 Sekunde betrug, die ich dann auf 10 ms verringert habe. Was ist eine "gesunde" Verzögerung? Warum brauchen wir hier überhaupt eine Verzögerung? Vielen Dank!

Antworten:


7

Sie sollten keine Verzögerung brauchen oder zumindest keine, die immer wieder aufwacht.

Wenn Sie, wie Sie vorschlagen, einen Thread initiiert haben, der durch einen Rückruf ausgelöst wird, ist keine Hauptschleife erforderlich. Wenn diese Schleife nicht jedes Mal, wenn sie ausgeführt wird, etwas Nützliches tut, verbraucht sie jedes Mal CPU-Zeit und Strom, wenn sie aufwacht und die Verzögerung wieder eintritt.

Ich würde entweder eine Verzögerung des maximalen ganzzahligen Werts festlegen, um für immer effektiv zu verzögern, oder einfach diesen Thread beenden.

Wenn die Schleife etwas Nützliches enthält, hängt die sinnvolle Verzögerung vollständig davon ab, was das ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.