RP2350-Zero/EEPROM: Rozdiel medzi revíziami
dBez shrnutí editace |
|||
| Riadok 1: | Riadok 1: | ||
[[RP2350 - úvod|Späť na RP2350 - úvod]] | [[RP2350 - úvod|Späť na RP2350 - úvod]] | ||
Aktuálna revízia z 19:55, 8. september 2026
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() {
}