Hallo zusammen, ich hab ein Problem beim Speichern von großen Datenmengen, bzw. ich weiß noch nicht wie ich diese sinnvoll in meinem SRAM speichern soll. Die Daten bestehen aus Schritten die sequenziell abgearbeitet werden müssen. Z.B.: Schritte ID Schritt-Type Schritt 0 Ausgebe Zeiger auf Ausgebe[0] 1 Empfangen Zeiger auf Empfangen[0] 2 Ausgebe Zeiger auf Ausgebe[1] . . Ausgabe ID Länge Daten[256] 0 16 0x11, 0x22 1 256 0x11; …........... . . Empfangen ID Länge Variable 0 1 Zeiger auf eine Variable . . Eigentlich sind das einige große Tabellen die miteinander verknüpft sind. Die Frage ist wie ich diese Datenstruktur in meinem AVR32 speichern kann. Hat vielleicht jemand eine Idee?
Naja. entwedr sie haben platz oder nicht. Und auf einem uC muss man etwas anders denken wie auf einem PC. Ich verwend zB nie dynamische Datenstrukturen, da nicht echtzeittauglich.
ich bin ein Anfänger auf dem Gebiet der C Programmierung. Die Frage ist wie baue ich diese Struktur auf, mit struct oder eventuell anders
typedef struct { U8 ID; U8 SchrittType; struct (*Schritt); <== Zeiger auf ein unbekanntes struct } schritte; typedef struct { U8 ID; U16 laenge; U8 data[256]; } ausgabe; Ich hab ein Problem wie ich ein Zeiger auf ein unbekanntes struct setze.
Vielleicht suchst Du sowas?
1 | typedef struct { |
2 | U8 ID; |
3 | U16 laenge; |
4 | U8 data[256]; |
5 | } ausgabe_t; |
6 | |
7 | typedef struct { |
8 | ...
|
9 | } eingabe_t; |
10 | |
11 | typedef union { |
12 | ausgabe_t ausgabe; |
13 | eingabe_t eingabe; |
14 | } aktion_t; |
15 | |
16 | typedef struct { |
17 | U8 ID; |
18 | U8 SchrittType; |
19 | aktion_t *Aktion; |
20 | } schritt_t; |
Geschickter wäre allerdings in ausgabe_t nur einen Zeiger auf die Daten zu speichern. Sonst benötigt jeder Schritt über 256 Byte im RAM. Dann brauchst Du auch keine Union, weil ausgabe_t und eingabe_t die gleichen Elemente enthalten:
1 | typedef struct { |
2 | U8 ID; |
3 | U16 laenge; |
4 | U8 *data; |
5 | } aktion_t; |
oder wenn es sein muss:
1 | typedef struct { |
2 | U8 ID; |
3 | U16 laenge; |
4 | void *data; |
5 | } aktion_t; |
kann man vielleicht in der union auch mit Zeigern arbeiten? um die Datenmenge im RAM noch mehr zu reduzieren. und wie definiere ich am besten diese Struktur schritt_t viele_Schritte[100]; aktion_t aktionen[100]; ausgabe_t ausgabe[100]; ich weiß zum Anfang nicht was und wieviel Schritte ich haben werde.
Mit Zeigern kann man keine Daten reduzieren. Nur anders zugreifen. In einem controller alloziert man in den meisten Faellen die maximal benoetigte Anzahl Speichereinheiten
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.