Bei großen Mengen an Textvariablen habe ich es für notwendig befunden, sie mit PROGMEM im Flash-Speicher abzulegen . Was sind die positiven und negativen Folgen des Speicherns großer Variablen in Flash (unter Verwendung von PROGMEM) gegenüber SRAM und EEPROM auf dem Arduino?
12
Die Hauptaussage ist, dass Sie die in PROGMEM gespeicherten Informationen nicht ändern können. Sie werden auch einen (sehr kleinen) Leistungstreffer hinnehmen müssen, da die Zeichenfolge jeweils 1 Byte kopiert werden muss.
Die Abnutzung des FLASH ist kein (primäres) Problem, da Sie den FLASH ohnehin neu programmieren müssen, um Änderungen an Ihrem Programm vorzunehmen.
Mit der IDE 1.x-Einführung wurde das F () -Makro aufgenommen. Dies macht es einfacher, Strings in PROGMEM zu behalten.
Zum Beispiel anstelle von: Serial.print ("Hello World!");
Sie können jetzt verwenden:
Serial.print (F ("Hallo Welt!");
Beachten Sie, dass F () keine Funktion ist, sondern nur ein Makro, sodass die Verwendung etwas eingeschränkt ist.
quelle
PROGMEM wird am besten für unveränderliche Daten verwendet. Wenn Sie die sich schnell ändernden Variablen beibehalten möchten, würde ich sie einfach im SRAM speichern. Auf der anderen Seite ist PROGMEM eine großartige Idee, wenn Sie unveränderliche Textvariablen (z. B. anzuzeigendes Material) haben möchten, die nicht zu oft abgerufen werden.
In Bezug auf EEPROM - versuchen Sie, dies für dauerhafte Inhalte zu speichern. IIRC ist es langsamer, Daten aus dem EEPROM über SRAM / PROGMEM abzurufen. Normalerweise kopiere ich (und andere) Daten aus dem EEPROM in den SRAM (auch das offizielle Beispiel tut dies), bevor ich sie verwende.
quelle