From 26577474efcb8874dad687467a8ba2f01678ff4c Mon Sep 17 00:00:00 2001 From: Chris--A Date: Fri, 20 Mar 2015 12:06:20 +1000 Subject: Updated EEPROM examples. Removed hard coded lengths, which were incorrect for standard Arduino's now. --- .../examples/eeprom_update/eeprom_update.ino | 23 +++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'libraries/EEPROM/examples/eeprom_update') diff --git a/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino b/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino index e0e18d8..dbf05ec 100644 --- a/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino +++ b/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino @@ -38,15 +38,32 @@ void loop() The function EEPROM.update(addr, val) is equivalent to the following: if( EEPROM.read(addr) != val ){ - EEPROM.write(addr, val); + EEPROM.write(addr, val); } ***/ - /** advance to the next address. there are 512 bytes in the EEPROM, so go back to 0 when we hit 512. **/ + /*** + Advance to the next address, when at the end restart at the beginning. + + Larger AVR processors have larger EEPROM sizes, E.g: + - Arduno Duemilanove: 512b EEPROM storage. + - Arduino Uno: 1kb EEPROM storage. + - Arduino Mega: 4kb EEPROM storage. + + Rather than hard-coding the length, you should use the pre-provided length function. + This will make your code portable to all AVR processors. + ***/ addr = addr + 1; - if (addr == 512) + if(addr == EEPROM.length()) addr = 0; + + /*** + As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an + EEPROM address is also doable by a bitwise and of the length - 1. + + ++addr &= EEPROM.length() - 1; + ***/ delay(100); } -- cgit v1.2.3-18-g5258