Forum: Mikrocontroller und Digitale Elektronik avr32 große Datenstruktur speichern


von avr32 (Gast)


Lesenswert?

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?

von Bonz (Gast)


Lesenswert?

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.

von avr32 (Gast)


Lesenswert?

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

von Bonz (Gast)


Lesenswert?

Struct

von avr32 (Gast)


Lesenswert?

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.

von Fabian O. (xfr)


Lesenswert?

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;

von avr32 (Gast)


Lesenswert?

Danke das ist es
ich teste es mal heute

von avr32 (Gast)


Lesenswert?

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.

von Ziff (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.