PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Array aus struct



bart0_8
22.11.2007, 19:05
Hallo, ich habe folgende Frage:

Ich habe mit typedef ein struct deklariert. Diese möchte ich im EEPROM oder Flash speichern (wo ist im Prinzip egal). Das fkt. auch alles. Jetzt brauche ich aber mehrere Array´s die aus diesen (verschiedenen) struct´s bestehen. Kann ich diese dann ebenfalls im EEPROM oder Flash speichern? Mein C-Buch hilft da jetzt nicht wirklich weiter. Schon mal vielen Dank im voraus!!!

Pascal
22.11.2007, 20:57
Kommt nur drauf an, wieviel Speicherplatz dein struct braucht. Und auch darauf, wieviele wiegroße array du da reinpacken willst. Das musst du selbst wissen. Ansonsten geht das sicherlich.

bart0_8
25.11.2007, 22:25
Hallo, wenn ich es wie folgt schreibe :

typedef struct {char adress1; char pin1; char adress2; char pin2;} taste;

taste T1 EEMEM = {0x72, 1, 0x74, 3};
taste T2 EEMEM = {0x72, 2, 0x74, 4};

taste *T13 EEMEM = &T1;
taste *T14 EEMEM = &T2;

taste *pro[] EEMEM = {&T13, &T14};

kommt die Fehlermeldung :
main.c:12: warning: initialization from incompatible pointer type

WARUM???

ReSeT
26.11.2007, 11:44
Ganz einfach:

taste *pro[] EEMEM = {&T13, &T14};

ist falsch, denn T13 und T14 sind ja schon Zeiger, also muss es

taste *pro[] EEMEM = {T13, T14};

heissen.

bart0_8
26.11.2007, 22:17
Wenn ich´s, so wie ReSeT beschrieben hat, ändere kommt :

error : initializer element is not constant
error : (near initialization for 'pro[0]')

error : initializer element is not constant
error : (near initialization for 'pro[1]')

auch wenn ich alles mit 'const' deklariere.

Wenn ich aber 'taste *pro ={etc.}' in einer Funktion deklariere funktionierts --> aber dann kann ich´s halt nicht im EEPROM speichern.

ReSeT
27.11.2007, 08:27
Öhmja, ich sollte vielleicht dazusagen, daß ich's mit ANSI-C unter GCC auf der PC Konsole getestet hab. Möglicherweise unterscheidet sich hier die AVR Implementierung. 8-[

Pascal
27.11.2007, 08:34
Dann kanns doch nicht gehen. Das mit dem EEPROM dürfte wohl eine Spezialität des avr-gcc sein und wird auf einem normalen PC nicht gehen.
Probiers mal mit dem avr-gcc aus ;-)

thewulf00
27.11.2007, 08:49
Mach keine Umwege, mach es direkt:

taste *pro[] EEMEM = {&T1, &T2};

bart0_8
27.11.2007, 15:18
Also, so funktioniert´s, super und vielen Dank!

Jetzt hab ich nur noch eine Frage zum Schluss: Hab ich jetzt nicht je 2x T1 und T2 (einmal als Zeiger und einmal als struct)????