Forum: Compiler & IDEs Fragen zur Realisierung (Strukturen, Arrays..etc)


von Bernhard (Gast)


Lesenswert?

Hallo Leute,

ich bin gerade dabei eine Applikation zu programmieren, und stehe nun 
vor dem Problem, welchen Datentyp ich zum Ablegen der Daten am besten 
verwenden soll. Konkret geht es um folgendes:

Ich habe eine Funktion (ich nenn sie mal getData), die mir einen Pointer 
auf ein integer Array liefert, wo die Daten abgelegt sind. In der 
Funktion getData parse ich nun die Daten, und lege sie in den einzelnen 
Datenelementen einer Struktur (ich nenn sie mal data_t) ab. Die Daten 
der Struktur werden nun in verschiedenen anderen Funktionen verändert 
und anschließend der Funktion processData übergeben. Das Problem ist 
nun, dass processData wiederrum nur einen Pointer auf ein integer Array 
akzeptiert. Die Frage ist nun, wie mache ich das klug? Ich könnte 
natürlich hergehen, und die einzelnen Elemente der Struktur wieder zu 
einem String zusammenstöpseln, bevor ich die Funktion processData 
aufrufe, doch das wäre ja ziemlich ineffizient und würde nur unnötig 
Speicher brauchen...
Gibt es vielleicht einen anderen Datentyp, den ich statt einer Struktur 
verwenden könnte und der einen ähnlichen "Komfort" wie eine Struktur 
bietet? Wie würdet ihr das lösen?

P.S: die Funktionen getData und processData kann ich leider nicht 
verändern...
1
data_t d; 
2
3
void getData(uint8_t *data){
4
//parse Daten und lege sie in den Variablen der Struktur ab
5
d.wert1 = ....;
6
d.wert2 = ....;
7
d.wert3 = ....;
8
}
9
10
void processData(uint8_t *data){
11
//do something
12
}

von Peter II (Gast)


Lesenswert?

Bernhard schrieb:
> Das Problem ist
> nun, dass processData wiederrum nur einen Pointer auf ein integer Array
> akzeptiert.

dann ändere das doch?

Oder du legst eine globale strutur an wo jeder drauf zugreifen kann, auf 
einem µC ist doch ok aber auf dem PC würde ich davon abraten.

von anon (Gast)


Lesenswert?

Du könntest natürlich auch den Pointer auf d in einen Pointer vom Typ 
uint8_t * casten, insofern processData dies berücksichtigt.

Wieso muss processData als Argument uint8_t * empfangen? Also wo liegt 
der Grund, dass Du dies nicht ändern kannst?

von Bernhard (Gast)


Lesenswert?

anon schrieb:
> Wieso muss processData als Argument uint8_t * empfangen? Also wo liegt
> der Grund, dass Du dies nicht ändern kannst?

Es handelt sich dabei um ein Projekt für die Uni - und die beiden 
Funktionen sind vorgegeben. Ich darf den Sourcecode zwar verändern, aber 
da die Änderungen ziemlich gravierend sind, nehme ich davon lieber 
Abstand.

von Noname (Gast)


Lesenswert?

Hm. Welche beiden Funktionen sind vorgegeben? getData und getData?

Du hast geschrieben, das Du die Daten aus dem Array lesen und in einer 
Struktur ablegen willst. Unterlasse das doch einfach und schreibe die 
Daten direkt in ein Array, das Du getData übergibst. Dann erledigt sich 
die Ineffizienz von allein.

von Bernhard (Gast)


Lesenswert?

Jep, getData und processData sind vorgegeben.

Das ganze gleich direkt in ein Array zu schreiben, hab ich auch schon 
angedacht. Da ich in dem integer Array aber unterschiedlich breite 
Datenworte(8bit, 16bit, 32bit, 64bit) gespeichert sind, hab ich mir 
gedacht, ich pack das in eine Struktur und erspar mir so das lästige 
zusammensetzen und auseinanderfrimeln der einzelnen Bytes. Aber ich 
glaub da bleibt mir wohl nichts anderes übrig.

Ich danke euch trotzdem! :)

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.