-
Array aus struct
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!!!
-
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.
-
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???
-
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.
-
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.
-
Ö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-[
-
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 ;-)
-
Mach keine Umwege, mach es direkt:
taste *pro[] EEMEM = {&T1, &T2};
-
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)????