[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