[De-Nut-Discussion] probleme beim eeprom schreiben
Harald Kipp
harald.kipp at egnite.de
Wed Jun 8 10:02:49 CEST 2005
Hallo Martin,
momentan würde es zwar noch passen, empfehlen würde ich aber
#define CONFAPP_NET_EE_OFFSET 512
Richtig, long und u_long sind 4 Bytes (32 Bits).
http://www.ethernut.de/api/group__xgNutOS.html
#define CONFAPP_NET_EE_MAGIC "APPNET"
ist dagegen 7 Bytes lang. Das Stringende '\x00' zählt mit.
printf("%d\n", sizeof("APPNET"));
würde 7 ausgeben und
strcpy(netconf.magic, CONFAPP_NET_EE_MAGIC);
kopiert 0 in netconf.dhcp.
Harald
At 21:04 07.06.2005 +0200, you wrote:
>Hallo,
>
>
>
>ich möchte eine Datenstruktur im EEPROM das Atmega128 auf dem ethernut
>board speichern.
>
>Dazu habe ich folgende Funktion:
>
>int NutNetAppSaveConfig(void)
>
>{
>
> u_char *cp;
>
> u_short i;
>
>
>
> netconf.size = sizeof(NETWORK);
>
> strcpy(netconf.magic, CONFAPP_NET_EE_MAGIC);
>
> for (cp = (u_char *) & netconf, i = 0; i < sizeof(NETWORK); cp++, i++)
>
> if (eeprom_read_byte((void *) (i + CONFAPP_NET_EE_OFFSET)) != *cp)
>
> eeprom_write_byte((void *) (i + CONFAPP_NET_EE_OFFSET), *cp);
>
>
>
> return 0;
>
>}
>
>
>
>Die zugehörige Funktion zum auslesen ist:
>
>int NutNetAppLoadConfig(void)
>
>{
>
> eeprom_read_block(&netconf, (void*) CONFAPP_NET_EE_OFFSET,
> sizeof(NETWORK));
>
> if (netconf.size != sizeof(NETWORK) || strcmp(netconf.magic,
> CONFAPP_NET_EE_MAGIC) != 0) {
>
> memset(&netconf, 0, sizeof(netconf));
>
> strcpy(netconf.hostname, "solarnut");
>
> memset(&netconf.dns1, 0, sizeof(netconf.dns1));
>
> memset(&netconf.dns2, 0, sizeof(netconf.dns2));
>
> return -1;
>
> }
>
> return 0;
>
>}
>
>
>
>Die Struktur ist folgendermaßen beschaffen:
>
>typedef struct _NETWORK NETWORK;
>
>struct _NETWORK {
>
> u_char size;
>
> u_char magic[6];
>
>
>
> u_char dhcp;
>
> u_char hostname[MAXLEN_NAMES];
>
> u_long dns1;
>
> u_long dns2;
>
>};
>
>extern NETWORK netconf;
>
>
>
>die verwendeten konstanten sind folgendermaßen definiert:
>
>#define CONFAPP_NET_EE_OFFSET 100
>
>#define CONFAPP_NET_EE_MAGIC "APPNET"
>
>
>
>Die Struktur wird also fast direkt nach der CONFNET Struktur mit den
>restlichen ip einstellungen geschrieben.
>
>Die nächste Struktur ab offset 132 (Wie groß sind eigentlich die u_long
>variablen sind doch 4byte?)
>
>
>
>Das Problem ist jetzt, dass nur die variable dhcp nicht richtig
>geschrieben wird (erlaubte werte sind 0 und 1). D.h. nach dem Schreiben
>ist die variable netconf.dhcp wieder = 0, auch wenn sie vorher = 1 war&
>
>Das seltsame ist: Alle anderen Werte werden richtig geschrieben!
>
>
>
>Mich verwundert diese Tatsache etwas soll heißen ich bin momentan ratlos
>und bitte um hilfe&
>
>Ach so: Beim speichern der Strukturen wird zuerst NutNetSaveConfig() und
>dann NutNetAppSaveConfig() (obige funktion) aufgerufen& vielleicht ist das
>relevant?
>
>
>
>Thx
>
>Martin
>_______________________________________________
>De-Nut-Discussion mailing list
>De-Nut-Discussion at egnite.de
>http://www.egnite.de/mailman/listinfo.cgi/de-nut-discussion
More information about the De-Nut-Discussion
mailing list