Timing auf einem ESP32 mit FreeRTOS (vTaskDelayUntil..)

Gast #6626336
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?
Gast #6626743
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.
Gast #6626766
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren