Hallo,
wie kriege ich die Inhalte von struct und arrays innerhalb einer
funktion möglichst unumständlich geändert!?
Als beispiel wollte ich für meine LEDs (ws2812b) die Lightweight Library
verwenden. Meine eigene Lib läuft zwar aber nicht so schön ;)
Soweit so gut. Nun da ich es gerne "einfach" habe wollte ich die Lib um
eine weitere Funktion erweitern.
In der Lib wird folgendes genutzt:
1
structCRGB{uint8_tg;uint8_tr;uint8_tb;};
2
structCRGBled[255];
Nun lässt sich das ganze ja wie folgt bearbeiten:
1
led[1].r=100;
2
led[1].g=100;
3
led[1].b=100;
Soweit sogut. Das ist mir aber zu umständlich. Ich hätte gerne zwei
weitere Funktionen wie folgt:
Nur leider will das nicht so ganz. Die Funktionen können weder auf das
led struct/array zugreifen noch auf LEDANZAHL.
Pointer etc übergeben ist genau so blöd da man dann wieder mehr angeben
muss. Es muss doch eine Möglichkeit geben das ganze so umzusetzen.
Danke euch.
Hallo Tobias,
Zeiger auf einen Datenbereich ist nicht unüblich !
Man kann sich etwas Scheibarbeit durch geschickte MACRO Definitionen
sparen.
Aber sonst, eher weniger.
Nunja, nur so einen aufruf wie
writeallledcolor(100,100,100,&r, &g, &b);
will ich ja vermeiden.
Also klar das C nicht/nur schwer mit anderen Sprachen vergleichbar ist.
Aber bei PHP z.b. würde das so ohne Probleme funktionieren.
Also da auf ein Array innerhalb einer funktion zuzugreifen ist standart.
>Nur leider will das nicht so ganz.
Und was will da nicht? Eigentlich müsste das gehen.
Auch wenn du da ordentlich Murkskram machst.
>void writeallledcolor(int rot, int gruen, int blau)
Was soll die int Scheisse da?
In deinem struct ist alles uint8_t.
Dann mach die Parameter auch uint8_t.
Es sind halt 3 kleine Fehler drin:
- Die Deklaration von i in den Funktionen fehlt jeweils
- writeoneledcolor() setzt .r, .g, .b auf 100, 100, 100 statt auf rot,
grün, blau
Ansonsten ist alles korrekt und funktioniert auch.
Die Funktionen können auf das globale Array zugreifen.
Was funktioniert denn bei dir nicht?
Tobias N. schrieb:> Wenn ich das so compilieren will dann mekkert er rum das led in der> funktion nicht deklariert ist und sowas
"Er" meckert, weil Du die Dinge, die Du da verwenden willst,
irgendwoanders deklariert haben wirst. Und wo hast Du das?
In irgendeiner anderen Quelltextdatei, richtig?
Die Themen wo deklariert man Dinge und wie funktionieren include -
Dateien haben wir hier praktisch jede Woche.
>Wenn ich das so compilieren will dann mekkert er rum das led in der>funktion nicht deklariert ist und sowas
Kompletten Sourcecode zeigen. Und zwar das gesamte Projekt.
Sonst reden sich hier wieder viele den Mund fusselig.
So habe ich das derzeit compiliert. Die funktionen wie oben geschrieben
hatte ich in der lightws.c und lightws.h eingefügt und dann klappt es
halt nicht.
Das ist jetzt das gesamte programm was zurzeit läuft.
>Das ist jetzt das gesamte programm was zurzeit läuft.
Und was soll man jetzt damit? Ich will das beschissene
Programm das NICHT läuft. Und bitte als ZIP
und nicht alle einzeln.
>Ich hatte die Funktionen wie oben in die lightws.c/h geschrieben und>dann versucht in der main.c aufzurufen
Dann pack mal ein
extern struct cRGB led[];
in lightws.h. Woher soll lightws.c denn wissen das dein
Array in main.c deklariert wurde?