RP2350-Zero/EEPROM
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() {
}