Hier mal einen Codeausschnitt
Code:
#define EEPROM_VNULL 230
uint8_t get_eeprom(uint8_t *eeprombuf, uint16_t eepromaddr, uint8_t buflength)
{
eeprom_read_block((void*)eeprombuf, (const void*)eepromaddr, buflength);
return strlen((char*)eeprombuf);
}
uint8_t set_eeprom(uint8_t *eeprombuf, uint16_t eepromaddr, uint8_t buflength)
{
eeprom_write_block((const void*)eeprombuf, (void*)eepromaddr, buflength);
return get_eeprom(eeprombuf, eepromaddr, buflength);
}
for(i = 0; i<11; i++) hilfstext[i] = 0;
get_eeprom((unsigned char*)hilfstext, EEPROM_VNULL, 10);
if((atoi(hilfstext) > 5000) || (hilfstext[0] == 0xFF))
{
for(i = 0; i<11; i++) hilfstext[i] = 0;
hilfstext[0] = '2';
hilfstext[1] = '7';
hilfstext[2] = '6';
hilfstext[3] = '5';
set_eeprom((unsigned char*)hilfstext, EEPROM_VNULL, 10);
for(i = 0; i<11; i++) hilfstext[i] = 0;
get_eeprom((unsigned char*)hilfstext, EEPROM_VNULL, 10);
}
SERVO_NULL = atoi(hilfstext);
Wenn der EEPROM einmal geschrieben wurde, sollte eigentlich bei jedem Controller Neustart nur noch gelesen werden.
Konkret stand beim Auslesen des EEPROMs vor Ort 0x322C3635 im EEPROM statt des erwarteten 0x32373635. Es war also auch nur ein Byte verändert.
Das Gerät ist aber bereits seit November im Einsatz und hatte bis dahin keine Schwierigkeiten.
Habe ich eventuell ein grundlegend falsches Konzept bei der Verwendung des EEPROMs? Wo liegt mein Denkfehler?
Danke
sast
Lesezeichen