RP2350-Zero/EEPROM

Zo stránky 3D liga wiki
Verzia z 19:43, 8. september 2026, ktorú vytvoril Sebastian (diskusia | príspevky) (Vytvorená stránka „Späť na RP2350 - úvod == EEPROM == Aby sme mohli s pamäťou pracovať, musíme si ju najprv rezervovať (alokovať). Rezervovať si ju môžeme po bajtoch, až do 4096 bajtov, čo je jeden blok pamäte. Do tohto bloku nám nič nemôže zasahovať okrem nášho programu. Je to podobné, ako keby sme si v hoteli rezervovali izbu – môžeme si v nej robiť, čo chceme, a jedine my máme kľúč od izby, takže sa do nej nedostane nikto in…“)
(rozdiel) ← Staršia verzia | Aktuálna úprava (rozdiel) | Novšia verzia → (rozdiel)
Prejsť na navigáciu Prejsť na vyhľadávanie

Späť na RP2350 - úvod

EEPROM

Aby sme mohli s pamäťou pracovať, musíme si ju najprv rezervovať (alokovať). Rezervovať si ju môžeme po bajtoch, až do 4096 bajtov, čo je jeden blok pamäte. Do tohto bloku nám nič nemôže zasahovať okrem nášho programu.

Je to podobné, ako keby sme si v hoteli rezervovali izbu – môžeme si v nej robiť, čo chceme, a jedine my máme kľúč od izby, takže sa do nej nedostane nikto iný.

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ú pamäť máme aj adresovanú, a to od bajtu 0 po náš zvolený bajt − 1. Každé číslo, znak či dátový typ pritom v pamäti zaberá inú veľkosť:

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() {
}