Fragen zu Variablen in Flash Speicher

Hallo allerseits,

ich nutze recht häufig die "F" Deklarierung um Speicherplatz freizuhalten.

So ala:

for (byte c = 0; c < 100; c++) {
oled.print(F("Hallo Welt"));
};

Ich frage mich, wie es ist, wenn diese in einer Loop stehen.
Wird die Variable dann nur einmal geschrieben und dann immer wieder gelesen, oder erfolgt das jedes Mal?
Hintergrund ist, dass ich defekte Arduinos habe, die Langzeittests hinter sich haben und zerstörte Flash Speicher durch zu häufiges Schreiben als Ursache vermute.

Alternativ lässt sich ja der String auch per #define einmal festlegen

#define Text F("Hallo Welt")

und dann immer wieder unter seinem Bezeichner aufrufen.

for (byte c = 0; c < 100; c++) {
oled.print(Text);
};

Macht das einen Unterschied beim Schreiben auf den Flash Speicher?
Gibt es eine einfache Möglichkeit den Flashspeicher auf Defekte und nutzbare Größe zu prüfen?

Der Flash Speicher wird nur beim Upload beschrieben.

Vergiss #define ...
In normalen Programmen wird das nur noch ganz selten benötigt.

Schreiben und lesen.
Macht es automatisch beim Upload.

1 Like

#define macht eine Textersetzung vor dem kompilieren. Darum ist es egal ob Du das mit #define oder 500 mal F("Hallo Welt") schreibst.

Bezweifle ich. Der Flash wird nur beim Upload geschrieben. Du kannst während des abarbeiten des Programms keine Variablen im Flash verändern.

Flash und EEprom können unendlich viele male gelesen werden. Nur das Schreiben bzw vorhergehende Löschen beschädigt sie auf lange dauer.

Nein. Du kannst nur vorhandene Totalausfälle finden aber nicht einen schleichendes Umspringen eines Bits nach langer Zeit.

Die garantierte durchschnittliche Schreibanzahl bezieht sich auf :
Seite 8 von https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf
" 4. Data Retention
Reliability qualification results show that the projected data retention failure rate is much less than 1 PPM over 20 years at
85°C or 100 years at 25°C."

Das ist auch noch nach 10000 Schreibzyklen vom Hersteller garantiert.

Der Umstand daß Du ein Byte schreibst und dann wieder liest sagt nichts darüber aus wie kaputt der Speicher wirklich ist. Ok, wenn das lesen fehlschlägt dann kannst Du sicher sein daß diese Speicherstelle kaputt ist. Sind die gelesenen Daten aber gleich den geschriebenen sagt das nichts aus wielange sie unverändert drin bleiben. Ob das 1 Sekunde oder 10 Jahre sind kannst Du mit einem einfachen lesen nicht ergründen.

Auch kannst Du nicht einzelne Speicherzellen des Flash vom Gebrauch außsschließen. Das Programm/Bootloader fängt immer an der gleichen Stelle an.

Grüße Uwe

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.