suggested changes to eeprom_write_byte (in file eeprom.h) : /** \ingroup avr_eeprom Write a byte \a __value to EEPROM address \a __p. */ static __inline__ void eeprom_write_byte (uint8_t *__p, uint8_t __value) { do {} while (!eeprom_is_ready ());
#if E2END <= 0xFF EEARL = (unsigned)__p; #else EEAR = (unsigned)__p; #endif /* read data and compare to __value */ EECR |= (1 << EERE); if (EEDR != __value) { #if defined(EEPM0) && defined(EEPM1) /* Set programming mode */ if (__value == 0xff) EECR = (1 << EEPM0); /* erase */ else EECR = 0; /* erase and write. */ #elif defined(EEPM0) || defined(EEPM1) # warning "Unknown EECR register, eeprom_write_byte() has become outdated." #endif EEDR = __value; __asm__ __volatile__ ( "/* START EEPROM WRITE CRITICAL SECTION */\n\t" "in r0, %[__sreg] \n\t" "cli \n\t" "sbi %[__eecr], %[__eemwe] \n\t" "sbi %[__eecr], %[__eewe] \n\t" "out %[__sreg], r0 \n\t" "/* END EEPROM WRITE CRITICAL SECTION */" : : [__eecr] "i" (_SFR_IO_ADDR(EECR)), [__sreg] "i" (_SFR_IO_ADDR(SREG)), [__eemwe] "i" (EEMWE), [__eewe] "i" (EEWE) : "r0" ); } } _______________________________________________ AVR-libc-dev mailing list AVR-libc-dev@nongnu.org http://lists.nongnu.org/mailman/listinfo/avr-libc-dev