Forum: Mikrocontroller und Digitale Elektronik Problem mit struct und Pointer


von Johannes (menschenskind)


Lesenswert?

Hallo,

Es geht um die WS2812 light Bibliothek.
Die Funktion
1
void ws2812_setleds     (struct cRGB  *ledarray, uint16_t number_of_leds);
 erwartet ja einen Pointer auf eine Struktur vom Typ
1
struct cRGB  { uint8_t g; uint8_t r; uint8_t b; };

Warum funktioniert bei mir dann dieser Ausdruck nicht(LED leuchtet nicht 
blau)?
1
ws2812_setleds((struct cRGB*){0,0,255},1);

Es wär schön, wenn jemand einen kleinen Anhaltspunkt für mich hätte...

Danke
Hannes

von Marcel (Gast)


Lesenswert?

Hallo Hannes,

das Problem liegt an dem Ausdruck "(struct cRGB*){0,0,255}" im 
Funktionsaufruf.
Mit diesem Typecast weist du den Compiler an, den Wert von "{0,0,255}" 
als Pointer-Adresse zu betrachten.
Was du erreichen möchtest, ist folgendes:
1
struct cRGB blue = {0, 0, 255};
2
ws2812_setleds(&blue, 1);

oder kürzer (ab C99):
1
ws2812_setleds(&(struct cRGB) {0, 0, 255}, &blue,1);

Viele Grüße,
Marcel

von Marcel (Gast)


Lesenswert?

Im zweitem Code-Beispiel hat sich ein kleiner Copy&Paste-Fehler 
eingeschlichen: Das "&blue," ist hier natürlich zu viel.

Viele Grüße,
Marcel

von Daniel A. (daniel-a)


Lesenswert?

Johannes H. schrieb:
> ws2812_setleds((struct cRGB*){0,0,255},1);

Ich frage mich immer wieder, warum sowas durch den compiler kommt. Der 
struct pointer zeigt so einfach auf null. Versuche folgendes:
1
ws2812_setleds((struct cRGB[]){{0,0,255}},1);

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.