URL: <http://savannah.nongnu.org/bugs/?38192>
Summary: eeprom_update_byte does not use bitwise AND Project: AVR C Runtime Library Submitted by: None Submitted on: Tue 29 Jan 2013 11:23:56 AM UTC Category: Library Severity: 3 - Normal Priority: 5 - Normal Item Group: libc code Status: None Percent Complete: 0% Assigned to: None Originator Email: popo...@oko.fei.tuke.sk Open/Closed: Open Discussion Lock: Any Release: Any Fixed Release: None _______________________________________________________ Details: As described in AVR103, there is no need of erase cycle if new value match bitwise AND between the old value and the new value. Patch below uses this functionality, eeprom endurance is higher and update time is reduced too. % diff -u eeupd_byte.S.orig eeupd_byte.S --- eeupd_byte.S.orig 2013-01-29 10:54:43.000000000 +0100 +++ eeupd_byte.S 2013-01-29 12:02:25.000000000 +0100 @@ -88,8 +88,14 @@ breq 2f # if defined (EEPM0) && defined (EEPM1) - ; Set programming mode: erase and write. + ; Set programming mode: write only out _SFR_IO_ADDR (EECR), __zero_reg__ + sbi _SFR_IO_ADDR (EECR),EEPM1 + ;test bitwise AND + and __tmp_reg__, r18 + cpse __tmp_reg__, r18 + ; final value different, set programing mode: erase and write + cbi _SFR_IO_ADDR (EECR),EEPM1 # elif defined (EEPM0) || defined (EEPM1) # error /* Unknown EECR register. */ # endif _______________________________________________________ Reply to this item at: <http://savannah.nongnu.org/bugs/?38192> _______________________________________________ Message sent via/by Savannah http://savannah.nongnu.org/ _______________________________________________ AVR-libc-dev mailing list AVR-libc-dev@nongnu.org https://lists.nongnu.org/mailman/listinfo/avr-libc-dev