Forum: Mikrocontroller und Digitale Elektronik ESP32 gptimer_handle_t


von Welle 🧐 S. (w3llschmidt)


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
}

von Obelix X. (obelix)


Lesenswert?


von Welle 🧐 S. (w3llschmidt)


Lesenswert?

Du meinst ich schicke die Ticks per Semaphore in andere Tasks? Hmm ...

von Jan K. (jan_k776)


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?

von Vincent H. (vinci)


Lesenswert?


von Jan K. (jan_k776)


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.

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.