Beschreibung
Speichere Daten im Flash-/Programm-Speicher statt im SRAM. Eine Beschreibung der unterschiedlichen Arten von Speicher des Arduinos findest du hier.
PROGMEM
ist ein Variablenmodifikator, welcher nur mit den Datentypen in pgmspace.h
verwendet werden sollte. Es ist eine Anweisung an den Compiler, um die Daten im Flash-/Programm-Speicher statt im SRAM zu speichern.
PROGMEM
gehört zur pgmspace.h-Softwarebibliothek. Diese ist in allen modernen IDE-Versionen
standardmäßig enthalten. Solltest du eine IDE-Version niedriger als 1.0 (von 2011) besitzen, musst du die Bibliothek erst händisch einbinden. Dies funktioniert wie folgt:
#include <avr/pgmspace.h>
Syntax
const dataType variableName[] PROGMEM = {data0, data1, data3…};
dataType
- Beliebiger Variablentyp
variableName
- Der Variablenname
PROGMEM
ist ein variabler Modifikator, weshalb die Arduino-IDE alle folgenden synonymen Versionen der Syntax akzeptiert. Durch Experimente wurde allerdings festgestellt,
dass in einigen Versionen der Arduino-IDE (Durch die unterschiedlichen GCC-Versionen) an einigen Stellen funktioniert und an anderen nicht. Die Beispiele unten funktionieren
mit der Arduino IDE Version 13. Frühere Versionen der IDE arbeiten besser, wenn PROGMEM
nach dem Variablennamen eingefügt wird.
const dataType variableName[] PROGMEM = {}; // Benutze dies
const PROGMEM dataType variableName[] = {}; // oder das,
+
const dataType PROGMEM variableName[] = {}; // aber nicht diese Version!
PROGMEM
kann auch für einzelne Variablen benutzt werden, dies ist aber nur sinnvoll, wenn ein großer Block von Daten gespeichert werden soll. Normalerweise ist das bei Arrays,
Strings (die auch Arrays sind) und weiteren komplizierteren Datenstrukturen der Fall.
Die Benutzung von PROGMEM
erfolgt in 2 Schritten. Nachdem die Daten in den Flash-/Programm-Speicher geladen wurden, müssen spezielle Methoden verwendet werden, um diese Variablen
wieder auszulesen und zu bearbeiten. Diese sind auch in der pgmspace.h-Softwarebibliothek definiert.