Hallo,
auf Basis des Beispiels in Kapitel 4.1.24 (hardware_timer) der
"Raspberr-pi-pico-c-sdk"-Doku erzeuge ich mir Ticks für den Aufbau eines
Zeitrasters.
Dazu erzeuge ich mir innerhalb "main" mittels "add_repeating_timer..."
eine callback-Funktion ("repeating_timer_callback", oberhalb "main"),
die während der Aufrufintervalle die "systemTimeInTicks" hochzählt (und
zwecks Kontrolle des Durchlaufs einmalig die onboard-LED25 einschaltet).
Listing in Auszügen für den Fall ok:
1 | #include .....
|
2 | .
|
3 | .
|
4 | .
|
5 | .
|
6 |
|
7 | //void _initSystemTime(void);
|
8 | .
|
9 | .
|
10 | .
|
11 |
|
12 | const uint8_t led_pin = 25;
|
13 | volatile uint16_t systemTimeInTicks=0;
|
14 | /*--------------------------------------------------*/
|
15 | bool repeating_timer_callback(struct repeating_timer *t)
|
16 | {
|
17 | systemTimeInTicks++;
|
18 | gpio_put(led_pin, true);
|
19 |
|
20 | return true;
|
21 | }
|
22 | //********************************************************************
|
23 | int main(void){
|
24 |
|
25 | stdio_init_all();
|
26 |
|
27 | _initPortDirections();
|
28 | _initPorts();
|
29 | //_initSystemTime(); // <-------------------------------!!
|
30 | bool rm_art; // Rueckmeldung add_repeating_timer
|
31 |
|
32 | systemTimeInTicks=0;
|
33 | struct repeating_timer timer;
|
34 | rm_art = add_repeating_timer_ms(-2, repeating_timer_callback, NULL, &timer);
|
35 | .
|
36 | .
|
37 | .
|
38 | .
|
39 | }
|
40 | .
|
41 | .
|
42 | .
|
Nun möchte ich allerdings die Anweisungen für den callback (und im
weiteren Verlauf auch weitere timing-bezogenen Routinen) in eine
Funktion auslagern und diese dann in "main" aufrufen.
Leider wird jetzt die callback-Funktion nicht mehr durchlaufen, was sich
im Ausbleiben der LED anzeigt und nach ca. 20 Sekunden auch durch das
Aussteigen der USB-Verbindung (vermutlich weil der Pico intern
"überläuft").
Listing in Auszügen für den Fall nicht ok:
1 | #include .....
|
2 | .
|
3 | .
|
4 | .
|
5 | .
|
6 |
|
7 | void _initSystemTime(void);
|
8 | .
|
9 | .
|
10 | .
|
11 |
|
12 | const uint8_t led_pin = 25;
|
13 | volatile uint16_t systemTimeInTicks=0;
|
14 | /*--------------------------------------------------*/
|
15 | bool repeating_timer_callback(struct repeating_timer *t)
|
16 | {
|
17 | systemTimeInTicks++;
|
18 | gpio_put(led_pin, true);
|
19 |
|
20 | return true;
|
21 | }
|
22 | //************************************************************************
|
23 | int main(void){
|
24 |
|
25 | stdio_init_all();
|
26 |
|
27 | _initPortDirections();
|
28 | _initPorts();
|
29 | _initSystemTime(); // <-------------------------------!!
|
30 |
|
31 | .
|
32 | .
|
33 | .
|
34 | }
|
35 | .
|
36 | .
|
37 | .
|
38 |
|
39 | void _initSystemTime(void)
|
40 | {
|
41 | bool rm_art; // Rueckmeldung add_repeating_timer
|
42 |
|
43 | systemTimeInTicks=0;
|
44 | struct repeating_timer timer;
|
45 | rm_art = add_repeating_timer_ms(-2, repeating_timer_callback, NULL, &timer);
|
46 | }
|
Wer kennt eine Lösung bzw. was mache ich falsch?
Danke für Tipps!