RP2350-Zero/EEPROM

Zo stránky 3D liga wiki
Verzia z 19:55, 8. september 2026, ktorú vytvoril Sebastian (diskusia | príspevky) (EEPROM)
Prejsť na navigáciu Prejsť na vyhľadávanie

Späť na RP2350 - úvod

Späť na RP2350 - úvod

EEPROM

EEPROM pamäť na RP2350 si vieš predstaviť ako pole so 4096 adresami – teda 4096 priehradiek, do ktorých sa zmestí presne 1 bajt, očíslovaných od 0 po 4095.

Skôr než do tohto poľa začneme zapisovať, musíme si povedať, koľko z týchto 4096 adries chceme reálne použiť – to sa volá rezervovanie (alokovanie) pamäte. Je to podobné, ako keby sme si v hoteli so 4096 očíslovanými izbami zabookovali určitý rozsah izieb, napríklad od čísla 0 po číslo 255 – v rámci tohto rozsahu si môžeme robiť, čo chceme, a jedine náš program má „kľúč“ k týmto izbám, takže sa do nich nedostane nič iné. Rezervovaný rozsah pritom nikdy nemôže presiahnuť veľkosť celého poľa, teda 4096 bajtov.

Keď si pamäť rezervujeme, môžeme do nej zapisovať, čo chceme – napríklad namerané vzdialenosti z ultrazvukového senzora.

Treba dávať pozor na to, že rezervovaný rozsah je adresovaný od 0 po náš zvolený bajt − 1. Každé číslo, znak či dátový typ pritom v poli zaberá inú veľkosť, teda iný počet susedných adries:

Dátový typ Veľkosť
bool, byte, char 1 bajt
short 2 bajty
int, unsigned int 4 bajty
long, unsigned long 4 bajty
float 4 bajty
double 8 bajtov

Ak si nie si istý veľkosťou konkrétneho typu, over si ju priamo v kóde príkazom sizeof(premenná).

Všetky testovacie programy nájdeš v File → Examples → EEPROM.

Zápis

#include <EEPROM.h>

void setup() {
  Serial.begin(115200);
  EEPROM.begin(256);      // rezervuje 256 bajtov "EEPROM" priestoru vo flashi (max. 4096)

  EEPROM.write(0, 123);   // zapíše hodnotu 123 na adresu 0
  EEPROM.commit();        // POVINNÉ – reálne zapíše do flashe (inak zostane len v RAM cache)

  byte hodnota = EEPROM.read(0);
  Serial.print("Zapísaná hodnota: ");
  Serial.println(hodnota);
}

void loop() {
}

Ak chceme zapisovať aj viacbajtové typy (napr. int alebo float), nemusíme ich rozkladať na jednotlivé bajty ručne – knižnica má na to funkcie EEPROM.put() a EEPROM.get(), ktoré si samy poradia so správnym počtom bajtov podľa typu premennej:

#include <EEPROM.h>

int adresa = 0;

void setup() {
  Serial.begin(115200);
  EEPROM.begin(256);

  float vzdialenost = 23.5;
  EEPROM.put(adresa, vzdialenost);      // zapíše všetkých sizeof(float) = 4 bajty naraz
  EEPROM.commit();

  adresa += sizeof(float);
  vzdialenost += 10;
  EEPROM.put(adresa, vzdialenost);
  EEPROM.commit();

  float nacitanaHodnota;
  EEPROM.get(adresa, nacitanaHodnota);  // prečíta správny počet bajtov automaticky

  Serial.print("Načítaná hodnota: ");
  Serial.println(nacitanaHodnota);
}

void loop() {
}

Čítanie

Ak chceš z pamäte iba čítať (napríklad po reštarte dosky, keď chceš zistiť naposledy uloženú hodnotu):

#include <EEPROM.h>

int adresa = 0;

void setup() {
  Serial.begin(115200);
  EEPROM.begin(256);

  byte hodnota = EEPROM.read(adresa);
  Serial.print("Hodnota na adrese 0: ");
  Serial.println(hodnota);
}

void loop() {
}

Vynulovanie

Ak chceš celú rezervovanú pamäť vynulovať (napríklad pred novým meraním):

#include <EEPROM.h>

void setup() {
  EEPROM.begin(256);

  for (int i = 0; i < 256; i++) {
    EEPROM.write(i, 0);   // 0 používame ako "prázdnu" hodnotu
  }
  EEPROM.commit();        // bez tohto sa vynulovanie neuloží natrvalo

  Serial.begin(115200);
  Serial.println("Pamäť vynulovaná.");
}

void loop() {
}