Reservieren von Speicher in den Flash-Speicher für Benutzerdaten (STM32F4 HAL)
Ich versuche, verwenden Sie den internen Blitz, ein STM32F405 zum speichern von ein paar Benutzer einstellbare bytes, bleiben nach dem Neustart.
Ich bin mit:
uint8_t userConfig[64] __attribute__((at(0x0800C000)));
reservieren von Speicher für die Daten, die ich speichern möchten.
Wenn das Programm startet, ich überprüfen, um zu sehen, ob das erste byte gesetzt ist 0x42
, wenn nicht, habe ich es mit:
HAL_FLASH_Unlock();
HAL_FLASH_Program(TYPEPROGRAM_BYTE, &userConfig[0], 0x42);
HAL_FLASH_Lock();
Danach überprüfe ich den Wert in userConfig[0]
und ich sehe 0x42
... Toll!
Wenn ich drücken Sie reset, jedoch, und betrachten Sie die Lage wieder, es ist nicht 0x42
mehr...
Irgendeine Idee, wohin ich gehe falsch gemacht? Ich habe auch versucht:
#pragma location = 0x0800C00
volatile const uint8_t userConfig[64]
aber ich bekomme das gleiche Ergebnis..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Okay, ich fand die Antwort auf die ST-Foren Dank
clive1
. Dieses Beispiel funktioniert für eine STM32F405xG.Müssen wir als erstes ändern Sie die Speicher-layout in der linker-script-Datei (.ld Datei)
Ändern Sie den vorhandenen FLASH und fügen Sie eine neue Zeile für die DATEN. Hier habe ich reserviert alle
section 11
.Handbuch für die Bearbeitung von linker Dateien auf der website sourceware
In der gleichen Datei, wir müssen hinzufügen:
Dies schafft eine
section
genannt.user_data
können wir die Adresse im Programm-code.Schließlich in Ihr .c-Datei hinzufügen:
Gibt, die wir speichern wollen, die
userConfig
variable in der.user_data
Abschnitt undconst
stellt sicher, dass die AdresseuserConfig
ist statisch gehalten.Nun, zu schreiben, um diesen Bereich des flash während der Laufzeit, können Sie den stm32f4 stdlib oder HAL-flash-Treiber.
Bevor Sie schreiben können, um das flash gelöscht werden (alle bytes auf 0xFF eingestellt) Die Anweisungen für die HAL-Bibliothek sagen nichts über das tun dies aus irgendeinem Grund...