EEPROMUpdate

Arduino ve Genuino kartlarındaki mikro denetleyicide, kart kapatıldığında (küçük bir sabit sürücü gibi) değerleri tutulan 512 bayt EEPROM: bellek bulunur.

Bu örneğin amacı, yalnızca yazılacak konumların önceki içeriğinden farklıysa veri yazan EEPROM.update() yöntemini göstermektir. Bu çözüm, her yazma işlemi 3,3 ms sürdüğü için çalıştırma süresinden tasarruf edebilir; EEPROM ayrıca tek bir konum için 100.000 yazma döngüsü sınırına sahiptir, bu nedenle herhangi bir konumda aynı değerin yeniden yazılmasını önlemek EEPROM genel ömrünü uzatacaktır.

Gerekli Donanım

  • Arduino veya Genuino Kurulu

Devre

Bu örnek için devre yok.

Şemalar

Kod

/***
   EEPROM Update method

   Stores values read from analog input 0 into the EEPROM.
   These values will stay in the EEPROM when the board is
   turned off and may be retrieved later by another sketch.

   If a value has not changed in the EEPROM, it is not overwritten
   which would reduce the life span of the EEPROM unnecessarily.

   Released using MIT licence.
 ***/


#include <EEPROM.h>

/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/
int address = 0;

void setup() {
  /** EMpty setup **/
}

void loop() {
  /***
    need to divide by 4 because analog inputs range from
    0 to 1023 and each byte of the EEPROM can only hold a
    value from 0 to 255.
  ***/

  int val = analogRead(0) / 4;

  /***
    Update the particular EEPROM cell.
    these values will remain there when the board is
    turned off.
  ***/

  EEPROM.update(address, val);

  /***
    The function EEPROM.update(address, val) is equivalent to the following:

    if( EEPROM.read(address) != val ){
      EEPROM.write(address, val);
    }
  ***/



  /***
    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.
  ***/

  address = address + 1;
  if (address == EEPROM.length()) {
    address = 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.

    ++address &= EEPROM.length() - 1;
  ***/


  delay(100);
}
[Kodu Al]

See Also

  • EEPROM.update()
  • EEPROM library reference
  • EEPROM Clear- EEPROM belleğinin içeriğini “0” ile doldurur.
  • EEPROM Read- EEPROM'da saklanan değerleri okur ve Seri üzerine yazdırır.
  • EEPROM Write- A0'dan okunan değerleri EEPROM'a kaydeder.
  • EEPROM Crc- EEPROM içeriğinin CRC'sini bir diziymiş gibi hesaplar.
  • EEPROM Iteration- EEPROM bellek konumlarından nasıl geçileceği ile ilgili programlama örnekleri.
  • EEPROM Put- Değişken anlambilim kullanarak değerleri EEPROM'a koyun (EEPROM.write () öğesinden farklıdır).
  • EEPROM Get- EEPROM'dan değerler alın ve seri halinde kayan nokta olarak yazdırın.