Forum: Mikrocontroller und Digitale Elektronik Verwendung einer struct und Rückgabe aus Funktion


von Johannes (menschenskind)


Lesenswert?

Hallo,

Leider bin ich aus anderen Threads nicht schlau geworden...

Ich nutze die WS2812 Bibliothek für die RGB-LED Ansteuerung.
In entspr. Headerdatei ist die entsprechende Struktur(cRGB) so 
definiert:
1
struct cRGB  { uint8_t g; uint8_t r; uint8_t b; };

In meinem Programm greife ich folgendermaßen darauf zu(enthält nur die 
wichtigsten Bestandteile):
1
#include "includes/light_ws2812.h"
2
#include <math.h>
3
#include <stdint.h>
4
#include <stdlib.h>
5
6
struct cRGB LED_COLOR[1];
7
struct cRGB NEW_COLOR[1];
8
9
uint8_t pseudofunction();
10
11
void main(){
12
.
13
.
14
.
15
NEW_COLOR[0] = pseudofunction();
16
ws2812_setleds(New_COLOR,1);
17
}
18
19
uint8_t pseudofunction(){
20
LED_COLOR[0].r = 255;
21
LED_COLOR[0].g = 127;
22
LED_COLOR[0].b = 0;
23
24
return LED_COLOR[0];
25
}

Jetzt las ich über die Verwendung der struct als Pointer für die 
Rückgabe.
Leider konnte ich das nicht auf mein Beispiel übertragen, da ich 
Fehlermeldungen bekam.
Wäret ihr so nett und könntet mir einen Anhaltspunkt geben?

Gruß
Hannes

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Johannes H. schrieb:
> struct cRGB LED_COLOR[1];

Welchen Sinn hat ein Array mit einem Element?

> void pseudofunction(){
> LED_COLOR[0].r = 255;
> LED_COLOR[0].g = 127;
> LED_COLOR[0].b = 0;
>
> return LED_COLOR[0];
> }

Eine Funktion muss einen Rückgabewert haben, damit sie etwas zurückgeben 
kann.

Deine Funktion aber hat keinen Rückgabewert - das hast Du mit dem void 
angegeben.

von Johannes (menschenskind)


Lesenswert?

Hallo Rufus,

Da hast Du allerdings recht. Ich hatte das schnell zusammengeschrieben 
und nicht an den Rückgabewert gedacht. Hab's oben korrigiert.

Die Struktur mit nur einem Element hatte ich daher, dass ich vorher ein 
Strukturarray(für mehrere LEDs) hatte und das dann einfach reduziert 
habe. Aber klar, dann kann ich auch gleich "struct cRGB LED_COLOR;" 
schreiben.

von Tom (Gast)


Lesenswert?

Wenn die Funktion ein struct cRGB zurückgeben soll, dann darf sie nicht 
mit Rückgabetyp uint8_t deklariert/definiert werden.

Bei solchen Problemen ist es sehr hilfreich, mit einem Minibeispiel auf 
dem PC zu experimentieren, bis man die Sprachkonstrukte verstanden hat:

https://ideone.com/k5xHWG

von Johannes (menschenskind)


Lesenswert?

Hi Tom,

Cooler Link! Hab ich mir gleich mal gespeichert.

Aber "blubb" und "blubb2" liefern ja keinen Rückgabewert als Zeiger, 
oder?

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.