Forum: Mikrocontroller und Digitale Elektronik Timing auf einem ESP32 mit FreeRTOS (vTaskDelayUntil..)


von Johannes (Gast)


Lesenswert?

Hallo,
ich habe es geschafft einen Task auf einem ESP32 mit FreeRTOS zum laufen 
zu bringen.
Allerdings habe ich ein verständisproblem (oder konfigurationsproblem) 
mit meinem Timings
1
#define CYCLE_RATE_MS 1000
2
static void testTask(void * pvParameters)
3
{
4
    ESP_LOGI(TAG_NTP, "starting testTask");
5
    TickType_t xLastWakeTime;
6
7
    xLastWakeTime = xTaskGetTickCount();
8
9
    while(1)
10
    {
11
        vTaskDelayUntil(&xLastWakeTime, CYCLE_RATE_MS);
12
13
        ESP_LOGI(TAG, "task executed");
14
    }
15
}
der Task wird jetzt zyklisch ausgeführt aber nicht alle 1000ms, sondern 
alle 10000ms.

gibt es in der Konfiguration noch irgend etwas, was ich einstellen muss?

von Johannes S. (Gast)


Lesenswert?

soweit ich weiss arbeitet der ESP32 mit 10 ms Ticks, genauer sollte man 
eine Konstante für die Umrechnung ms <-> ticks verwenden:
1
const TickType_t xDelay = 500 / portTICK_PERIOD_MS;

von Johannes (Gast)


Lesenswert?

Johannes S. schrieb:
> soweit ich weiss arbeitet der ESP32 mit 10 ms Ticks

Das hatte ich ja bemerkt.
Habe gedacht, dass man das auch irgendwo einstellen/umstellen kann.
Dann rechne ich es eben immer um.
Besten dank :)

von John Doe (Gast)


Lesenswert?

Johannes S. schrieb:
> soweit ich weiss arbeitet der ESP32 mit 10 ms Ticks, genauer sollte man
> eine Konstante für die Umrechnung ms <-> ticks verwenden:

RTFM!
Die Länge von Ticks des FreeRTOS auf dem ESP32 sind genauso lange, wie 
man sie einstellt. Alles andere ist Unsinn.

von John Doe (Gast)


Lesenswert?

Johannes schrieb:
> Johannes S. schrieb:
>> soweit ich weiss arbeitet der ESP32 mit 10 ms Ticks
>
> Das hatte ich ja bemerkt.
> Habe gedacht, dass man das auch irgendwo einstellen/umstellen kann.

Nach dem "Denken" hat es für das Lesen der Doku nicht mehr gereicht?
RTFM!

Natürlich kannst Du die Ticklänge einstellen:
Entweder Du machst das manuell in der FreeRTOS Config oder bei Nutzung 
des ESP-IDF über
1
idf.py menuconfig
Component Config -> FreeRTOS -> Tick rate [Hz]

Einfacher geht es nicht.

von Jemand (Gast)


Lesenswert?

Johannes S. schrieb:
> soweit ich weiss arbeitet der ESP32 mit 10 ms Ticks, genauer
> sollte man
> eine Konstante für die Umrechnung ms <-> ticks verwenden:const
> TickType_t xDelay = 500 / portTICK_PERIOD_MS;

Da gibt's ein Makro für pdMS_TO_TICKS.

Der TE müsste also
1
vTaskDelayUntil(&xLastWakeTime, pdMS_TO_TICKS(CYCLE_RATE_MS));
 schreiben, wenn ich mich nicht irre.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.