ESP32 gptimer_handle_t

OP #7828617
Lesenswert?

Hallo Leute,

ich habe hier im main.c einen Timer laufen.

Wie kann ich das gptimer_handle_t so anlegen, dass ich den Timer via global.h aus anderen .c auslesen kann?

1
#include "global.h"
2
#include "driver/gptimer.h"
3

4
gptimer_handle_t gptimer = NULL;
5

6
gptimer_config_t timer_config = 
7
{
8
    .clk_src = GPTIMER_CLK_SRC_DEFAULT,
9
    .direction = GPTIMER_COUNT_UP,
10
    .resolution_hz = 65573,
11
};
12

13
void get_timmer_task() 
14
{
15
    uint64_t count;
16
    while(1) 
17
    {
18
ESP_ERROR_CHECK(gptimer_get_raw_count(gptimer, &count));
19
        printf("%lld\n", count);
20
     vTaskDelay(1000 / portTICK_PERIOD_MS); 
21
    }
22

23
vTaskDelete(NULL);        
24
}
25

26
void app_main(void)
27
{
28
    ESP_ERROR_CHECK(gptimer_new_timer(&timer_config, &gptimer));
29
    ESP_ERROR_CHECK(gptimer_enable(gptimer));
30
    ESP_ERROR_CHECK(gptimer_start(gptimer));
31
xTaskCreatePinnedToCore(*get_timmer_task,"get_timmer_task",2048,NULL,1,NULL,1);
32
}
#7829944
Lesenswert?

gptimer_handle_t ist doch nur der Typ. Du willst gptimer woanders nutzen? Klassischerweise packst du dann die Deklaration nach globals.h und machst noch n extern davor.

Aber: da du offenbar ein RTOS nutzt würde ich zwingend empfehlen, herauszufinden, wie dort der empfohlene Weg ist - denn du kannst so ne Menge kaputt machen, UB etc erzeugen. Die timer Zugriffe sind garantiert nicht threadsicher. Ziel sollte sein, globals zu reduzieren.

Wie wäre es mit einer Queue?

#7830112
Lesenswert?

Vincent H. schrieb:

Jan K. schrieb:

Die timer Zugriffe sind garantiert nicht threadsicher.

Oder doch: https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/gptimer.html#thread-safety

Upsi. In der Tat - bin ich nicht von ausgegangen und war zu faul zum Doku gucken.

@Topic Da hilft leider nur C lernen: https://www.geeksforgeeks.org/understanding-extern-keyword-in-c/

Full ack.

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