Leírás
Az adatok a flash (program) memória helyett az SRAM-ban tárolódnak. Itt leírás található az Arduino kártyán elérhető különféle memóriatípusokról.
A PROGMEM
kulcsszó egy változó módosító, csak a pgmspace.h-ban definiált adattípusokkal használható. Azt mondja a fordítónak, hogy "tegye ezt az információt a flash memóriába", ahelyett, hogy az SRAM-ba, ahova általában kerülne.
A PROGMEM a pgmspace.h könyvtár része. Ez automatikusan szerepel az IDE modern verzióiban. Ha azonban 1.0 (2011) alatti IDE-verziót használ, először fel kell vennie a könyvtárat a vázlat tetejére, például:
#include <avr/pgmspace.h>
Míg a PROGMEM
használható egyszerű változón, akkor tényleg csak akkor éri meg a felhajtást, ha nagyobb adattömböt kell tárolni, ami általában egy tömbben a legegyszerűbb (vagy egy másik C++ adatszerkezetben, amely a jelen tárgyalásunkon túl van).
A PROGMEM használata szintén kétlépéses eljárás. Az adatok Flash memóriába kerülése után speciális, szintén a pgmspace.h könyvtárban definiált módszerek (függvények) szükségesek ahhoz, hogy a programmemóriából visszaolvassák az adatokat SRAM-ba, így tudunk vele valami hasznosat tenni.
Szintaxis
const dataType variableName[] PROGMEM = {data0, data1, data3…};
Ne feledje, hogy mivel a PROGMEM egy változó módosító, nincs szigorú szabály arra vonatkozóan, hogy hová kell mennie, ezért az Arduino fordító elfogadja az összes alábbi definíciót, amelyek szintén szinonimák. A kísérletek azonban azt mutatták, hogy az Arduino különböző verzióiban (amelyek a GCC-verzióhoz kapcsolódnak) a PROGMEM működhet az egyik helyen, a másikon nem. Az alábbi „sztring táblázat” példát teszteltük, hogy az Arduino 13-mal működik-e. Az IDE korábbi verziói jobban működhetnek, ha a PROGMEM szerepel a változó neve után.
const dataType variableName[] PROGMEM = {}; // használja ezt a formát
const PROGMEM dataType variableName[] = {}; // vagy ezt
const dataType PROGMEM variableName[] = {}; // ezt ne
Paraméterek
dataType
: Engedélyezett adattípusok: bármilyen változótípus.
variableName
: az adattömb neve.