RP2350-Zero/EEPROM: Rozdiel medzi revíziami

Zo stránky 3D liga wiki
Prejsť na navigáciu Prejsť na vyhľadávanie
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…“
 
Sebastian (diskusia | príspevky)
dBez shrnutí editace
 
(Jedna medziľahlá úprava od rovnakého používateľa nie je zobrazená.)
Riadok 3: Riadok 3:
== EEPROM ==
== EEPROM ==


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


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ý.
[[File: EEPROM-adress.png | 400px]]
 
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.
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ť:
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:


{| class="wikitable"
{| class="wikitable"
Riadok 26: Riadok 28:
| double || 8 bajtov
| double || 8 bajtov
|}
|}
[[File: EEPROM-data.png | 500px ]]


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

Aktuálna revízia z 19:55, 8. september 2026

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