Fragen zur Realisierung (Strukturen, Arrays..etc)

Gast #2702543
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
}
Gast
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.
Gast
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?
Gast
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.
Gast
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.
Gast
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! :)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.