uint8_t data[8] von Funktion erwartet, wie übergeben?

Gast #3348675
Lesenswert?

Hi Zusammen!

Ich habe eine Funktion, die unter anderem ein Array aus uint8_t 
erwartet. Die Anzahl der zu übergebenen Bytes variiert, wird aber mit 
übergeben.

Nun möchte ich die Funktion aufrufen und direkt in der Parameterübergabe 
fixe Werte einsetzen können. Erwartet die Funktion ein einzelnes uint8_t 
ist der Fall klar. Aber auch nach diversen Versuchen und Suche im Netz 
finde ich keine Lösung um das erwartete Array direkt zu füttern.

Ein Array an sich zu übergeben, insbesondere mit nem Pointer wäre ja 
nicht tragisch, aber gibt es wirklich keine Möglichkeit das Array quasi 
im eigentlichen Funktionsaufruf zu füllen? Ein {0,1,0,1} mag er nicht ;)



Danke und Gruß
Danny
Gast #3348736
Lesenswert?

danke Euch beiden für die schnellen Antworten!

Beide Möglichkeiten habe ich getestet und sie funktionieren. Da aber 
auch andere Variablen mitten in dem Array stehen können müssen, scheidet 
die "vergewaltigte String-Variante" aus.

Etwas peinlich ist es mir, dass ich nun selbst eine vermeindlich noch 
bessere Lösung gefunden habe (wie immer, gesucht, gesucht, gesucht, hier 
gefragt und zack der Geistesblitz  ;)



void tx( uint8_t *data, ... )  durch die drei Punkte kann ich mehr 
Variablen übergeben als die dort bereits aufgeführten.

Ein tx(2,1,2); funktioniert genauso, wie ein tx(8,1,2,3,4,5,6,7,8). 
Durch das Mitgeben der Länge weiß die Funktion wann Schluß ist.

Für mich ist das grad eine traumhafte Lösung (Funktion mit variabler 
Parameterzahl) - oder handel ich mir damit andere Probleme ein?

Gruß
Danny
Gast #3348985
Lesenswert?

Danny schrieb:
> Für mich ist das grad eine traumhafte Lösung (Funktion mit variabler
> Parameterzahl) - oder handel ich mir damit andere Probleme ein?

Du mußt halt immer akribisch darauf achten, daß du die Anzahl anpasst, 
wenn du Parameter hinzufügst oder löschst. Und die Werte werden nicht 
als uint8_t übergeben, sondern alle auf int erweitert, weil das das 
kleinste ist, was per varargs übergeben werden kann. Ob das für dich ein 
Nachteil ist, hängt von der Zielplattform ab.

Danny schrieb:
> Da aber
> auch andere Variablen mitten in dem Array stehen können müssen, scheidet
> die "vergewaltigte String-Variante" aus.

Was verstehst du denn unter "andere Variablen mitten in dem Array"?
#3349038
Lesenswert?

Danny schrieb:

> Für mich ist das grad eine traumhafte Lösung (Funktion mit variabler
> Parameterzahl) - oder handel ich mir damit andere Probleme ein?

Das leidige 'printf'-Problem.
Du alleine bist dafür zuständig, dass die Argumente sowohl in Anzahl als 
auch im Datentyp korrekt sind. Der Compiler kann dir nicht mehr mit 
irgendwelchen Prüfungen unter die Arme greifen.
Gast #3349046
Lesenswert?

@Rolf: Das Achten auf die Länge ist nicht das Problem. Das Erweitern auf 
int stört mich allerdings (Prinzipsache). Mit "andere Variablen mitten 
in dem Array" meinte ich bspw. tx(4,1,temp_aussen,3,4);

@Karl Heinz: Das "Risiko" wäre ich eingegangen, aber das "Aufblasen" auf 
int versalzt mir sie Suppe...

also doch die Lösung von Johann: foo ((char[]) { 1, 2, 3, 4 });
Gast #3349968
Lesenswert?

@Oliver: sorry für die späte Antwort, ich war den ganzen Tag 
unterwegs... Tja, was stört mich daran... im ersten Moment einfach das 
Prinzip insgesamt 8 Byte zu "verschwenden" nur zugunsten einer 
Schreibweise, die ich für mich schöner finde. Eher n Bauchgefühl... auf 
einem 8Bit Controller für eine 8Bit Variable 16Bit zu nutzen, dass 
widerstrebt mir irgendwie.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren