Problem mit struct und Pointer

OP #4636038
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
Gast #4636049
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.