Witam,
Zwracam siê z pro¶b± o zerkniêcie na mój sposób zapisu i odczytu danych do EEPROM na Atmel AVR ATmega. Generalnie nie mia³em problemów na ATmega 32 i 16. Ostatnio robi³em co¶ na ATmega 8 i po zapisaniu danych do EEPROM, wy³±czeniu zasilania i ponownym w³±czeniu, czêsto dane by³y inne. Dzi¶ pojawi³y mi siê rzadkie problemy podobnego rodzaju na ATmega 32. Nadmieniê, ¿e taktujê mikrokontrolery kwarcem ~18MHz. Co mo¿e byæ przyczyn± takich b³êdów? Z góry dziêkujê za pomoc.
Robot
Zapis do EEPROM:
/* aktualizacja EEPROMu */
while (!eeprom_is_ready()) ; ch = eeprom_read_byte((uint8_t *)((int)k * 3 + 2)); while (!eeprom_is_ready()) ; if (ch != c[k]._power) eeprom_write_byte((uint8_t *)((int)k * 3 + 2), c[k]._power);
while (!eeprom_is_ready()) ; ch = eeprom_read_byte((uint8_t *)((int)k * 3 + 1 + 2)); while (!eeprom_is_ready()) ; if (ch != c[k]._time) eeprom_write_byte((uint8_t *)((int)k * 3 + 1 + 2), c[k]._time);
while (!eeprom_is_ready()) ; ch = eeprom_read_byte((uint8_t *)((int)k * 3 + 2 + 2)); while (!eeprom_is_ready()) ; if (ch != c[k]._delay) eeprom_write_byte((uint8_t *)((int)k * 3 + 2 + 2), c[k]._delay);
while (!eeprom_is_ready()) ;
----------------------------------
Odczyt z EEPROM:
while (!eeprom_is_ready()) ; c[k]._power = eeprom_read_byte((uint8_t *)((int)k * 3 + 2)); while (!eeprom_is_ready()) ; if (c[k]._power > MAX_POWER) c[k]._power = MAX_POWER; else if (c[k]._power < 1) c[k]._power = 1;
while (!eeprom_is_ready()) ; c[k]._time = eeprom_read_byte((uint8_t *)((int)k * 3 + 1 + 2)); while (!eeprom_is_ready()) ; if (c[k]._time> MAX_TIMES) c[k]._time = MAX_TIMES; else if (c[k]._time < 1) c[k]._time = 1;
while (!eeprom_is_ready()) ; c[k]._delay = eeprom_read_byte((uint8_t *)((int)k * 3 + 2 + 2)); while (!eeprom_is_ready()) ; if (c[k]._delay > MAX_DELAY) c[k]._delay = MAX_DELAY;
while (!eeprom_is_ready()) ;