Antworten:
Hier ist ein schneller Vergleich von FLASH, EEPROM und SRAM auf dem AtMega328, dem Mikrocontroller in vielen der aktuellen Arduino-Boards (außer Due, Leonardo, älteren Arduinos und einigen anderen kompatiblen Boards).
PROGMEM
.Die wichtigste hypothetische negative Konsequenz bei der Verwendung von PROGMEM ist das Limit von 10.000 Schreibzyklen . Die wichtigste negative Folge der Verwendung von EEPROM ist die Komplexität des Codes zum Lesen / Schreiben / Kopieren von Daten. SRAM, es ist nur sehr begrenzt in der Kapazität .
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.
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.