PROGMEM
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...};
※ Anmerkungen und Warnungen:
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.
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.
Parameter
- dataType - Beliebiger Variablentyp
- variableName - Der Variablenname
Beispielcode
Das folgende Code-Fragment zeigt, wie ein unsigned chars (bytes) und ints (2 bytes) in PROGMEM geschrieben und wieder ausgelesen werden können.
Array von Strings
Wenn mit einer großen Menge an Text gearbeitet wird (Beispiel: Projekt mit LCD-Display), ist es häufig nötig, Texte in ein Array von Strings zu packen. Dadurch, dass Strings bereits selbst Arrays sind, entsteht dadurch ein 2-dimensionales Array.
Diese großen Datenstrukturen können in den Flash-/Programm-Speicher geladen werden. Das Beispiel unten zeigt das.
※ Anmerkungen und Warnungen:
Bitte beachte, dass die Variablen entweder global definiert oder als static definiert sein müssen, um mit PROGMEM zu funktionieren.
- Der folgende Code wird nicht funktionieren, wenn er in einer Funktion ausgeführt wird:
- Der folgende Code wird funktionieren, wenn er in einer Funktion ausgeführt wird:
Das F() Makro
Wenn eine Instruktion wie
benutzt wird, wird der String bevor er auf den seriellen Ausgang geschrieben wird, normalerweise in den RAM gespeichert. Der RAM kann aber sehr leicht volllaufen, wenn der Code sehr viel auf den seriellen Port schreibt. Wenn du noch freien Flash-/Programm-Speicher hast, kannst du dem Compiler sagen, dass er die Werte in den Flash-/Programm-Speicher schreiben soll:
Siehe Auch
- Sprache : sizeof()
- Sprache : array
- Sprache : string
- Beispiel : Arten von Speicher auf dem Arduino
※ ARDUINO KAUFEMPFEHLUNG
Arduino UNO R3 | |
Arduino Starter Kit |