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
}

: Bearbeitet durch User
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?

: Bearbeitet durch User
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.