Die kurze Antwort lautet nein: PROGMEM-Daten sind schreibgeschützt.
Einschränkungen
des Flash-Speichers Das erste, was zu verstehen ist, ist, dass der Flash-Speicher (in dem sich der Programmspeicher befindet) für die langfristige feste Speicherung ausgelegt ist. Das Lesen ist sehr schnell und präzise. Im Allgemeinen können Sie es jedoch nicht byteweise ändern (z. B. eine bestimmte Variable ändern). Normalerweise müssen Sie es in großen Blöcken löschen und neu schreiben. Dies macht es für die Laufzeitmanipulation völlig unpraktisch, da Sie während des Lösch- und Schreibzyklus viele redundante Informationen an einem anderen Ort speichern müssten.
Was PROGMEM tatsächlich tut
Alle in Ihrem Code angegebenen Literaldaten (wie Zeichenfolgen und Zahlen) befinden sich immer zuerst im Programmbereich (dh in Flash). Wenn Ihre Skizze diese Daten jedoch zur Laufzeit tatsächlich verwenden möchte, muss sie normalerweise etwas Platz im SRAM zuweisen und kopieren. Das bedeutet, dass Sie zwei Kopien erhalten: das feste Original in Flash und die temporäre Kopie in SRAM.
Wenn Sie den Modifikator PROGMEM verwenden, weisen Sie ihn an, diese zweite Kopie nicht im SRAM zu erstellen. Stattdessen greift Ihre Skizze einfach auf das Original in Flash zu. Dies ist sehr nützlich, wenn Sie die Daten immer nur lesen müssen , da die Zuordnungs- und Kopiervorgänge vermieden werden.
Das Kopieren in SRAM ist jedoch unerlässlich, wenn Sie die Daten ändern möchten. Abgesehen von den oben erwähnten Flash-Einschränkungen ist es auch eine Frage der Codesicherheit.
Wenn Sie die im Programmraum gespeicherten Daten ändern können, folgt logischerweise, dass Sie auch den im Programmraum gespeicherten Code ändern können. Dies würde bedeuten, dass ein einfacher Fehler (oder theoretisch ein böswilliger Angriff) dazu führen könnte, dass Ihre Skizze zur Laufzeit teilweise oder vollständig neu geschrieben wird. Dies kann zu sehr unvorhersehbaren Ergebnissen führen, die von der einfachen Einstellung der Arbeit bis zur Beschädigung / Zerstörung angeschlossener Geräte reichen.
Weitere Informationen
Hier erfahren Sie mehr über das Low-Level-PROGMEM-Material:
Eine ältere Version desselben PROGMEM-Tutorials finden Sie hier: