Adresační techniky Flashcards
Adresační techniky
Každý čip, v našem případě Arduino má několik druhů pamětí. Každá z nich má specifický účel a každé Arduino má každou paměť jinak velikou. Jak velikou a kolik které jste využili o tom Vás informuje Arduino IDE, ve kterém píšete program. Výjimkou je paměť EEPROM, kterou nemají všechny čipy a její využití si řídíte sami.
FLASH: je část paměti, kde je zavaděč a kam se nahrává program. Uložené údaje zde zůstávají i po vypnutí proudu. Představte si to jako BIOS v počítači.
SRAM: je část paměti, kam se ukládají proměnné a kam si Arduino odkládá výpočty při svém běhu. Při přerušení napájení se data vymažou. Představte si to jako RAM v počítači.
EEPROM: je část paměti, kam si můžeme odkládat data při běhu programu a znovu je využívat. Oproti SRAM se data po přerušení napájení nevymažou, má však mnoho nevýhod, na které je potřeba myslet. Představte si to jako pevný disk s velmi omezeným počtem zápisů.
Podrobný popis jednotlivých typů pamětí
FLASH a zavaděč. Když pořídíte nové Arduino, zavaděč je nahraný z výroby a nemusíte se tím nijak zabývat. Pokud koupíte samostatný čip, je zapotřebí zavaděč nahrát. Jak, to si můžeme někdy ukázat.
FLASH a program. Sem se nahrává ta část, kterou napíšete. Převaděč zajistí správný formát a strukturu. Vše, co jste napsali, prostě najdete tady. Viděl jsem dotaz, jak do této části zapisovat bez programátoru při běhu programu. Jde to, ale neřeknu jak, je to jako vyměňovat motor společně s kolem za jízdy. Prostě na to zapomeňte, neznám jediný rozumný příklad, proč to dělat.
SRAM při spuštění programu jsou do této části nahrány všechny proměnné, které máte uvedeny v hlavičce programu. Máme je tedy dvakrát – jednou ve FLASH a jednou v SRAM. Potom při běhu programu jsou sem ukládány proměnné deklarované v samostatných funkcích mimo setup a loop. Po skončení funkce se prostor opět uvolní. SRAM je poměrně malá a budete překvapeni, jak rychle volné paměti ubývá. Hlavně při práci s textem to jde rychleji, než píšete. U tuto část paměti se nemusíte v podstatě nijak starat, Arduino si samo řídí její využití. Na co je potřeba dávat pozor je na přetečení paměti. Tedy když se tam pokusíte zapsat více dat, než je. Nejčastěji se to stává, když se dostanete na hranici velikosti paměti a pak začnete vytvářet texty co potřebujete odeslat třeba na internet. Nebo když čtete data ze Serial portu, teče jich pořád více a vy je zpracujete a včas nezahazujete. Další problém je fragmentace paměti. Ale to vše se dá uřídit.
EEPROM je samostatná kapitola. Sem si ukládáme data, o která nechceme přijít, když náhodou dojde k výpadku napájení, chceme se k nim vrátit a proměnné nám zaberou mnoho místa, a ještě k tomu budou mít složitou strukturu, např. log. Do každé buňky můžeme uložit číslo v rozsahu 0-255. Pokud chceme větší číslo, je potřeba použít bitového posunu. Zapisování do této paměti si neřídí Arduino samo, vy určujete, do které buňky, co a kdy zapíšete. Přitom je potřeba dbát na to, abychom nepřekročili počet buněk a omezit počet zápisů za určitou dobu, abychom paměť EEPROM neznehodnotili. Pokud bude buňka poškozená, nijak na to nepřijde. Chcete zapsat – Arduino zapíše, jenom pak nedostanete to, co jste zapsali. Jedinou možností, jak toto ošetřit je, napsat si funkci, která bude kontrolovat zapsaná data a na to adekvátně reagovat. Knihovna EEPROM toto všechno umí.
FLASH paměť
jelikož je PROGMEM datový modifikátor tak pro něj nejsou stanovená přesná pravidla zápisu a kvůli tomu ARDUINO kompilátor uzná většinu zápisu s příkazem PROGMEM
SRAM
pokud neuvedu žádný prefix tak programuji pro SRAM, platí také pro konstanty
EEPROM
Mikrokontroler na desce Arduino a Genuino AVR má paměť EEPROM, jejíž hodnoty jsou udržovány při vypnutí desky (jako malý pevný disk).
Tato knihovna umožňuje čtení a zápis těchto bajtů.