Im STM32F4 steckt ein kleines batteriegepuffertes RAM (genannt BKP) mit 80 Bytes, das Teil der RTC ist. Ich würde es gerne zum nichtflüchtigen Speichern von Parametern, Kalibrationswerten etc. nutzen. Idealerweise würde ich die Speicherverwaltung, also wo in diesem Bereich welche Variable liegt, dem Compiler überlassen. Ich nutze die Cube-IDE mit dem gcc-Compiler. Es gibt die Möglichkeit, bei der Variablendeklaration eine „section“ anzugeben, allerdings scheint es für das BKP keine eigene Sektion zu geben. Muß ich dazu das Linker-Skript ändern und gibt es dafür ein Tool? Ein weiteres Problem: statische Variablen werden beim Systemstart ja automatisch genullt, was beim NV-RAM natürlich nicht sinnvoll ist. Läßt sich die Initialisierung abschalten?
Mike schrieb: > Im STM32F4 steckt ein kleines batteriegepuffertes RAM (genannt BKP) mit > 80 Bytes, das Teil der RTC ist. Ich würde es gerne zum nichtflüchtigen > Speichern von Parametern, Kalibrationswerten etc. nutzen. Idealerweise > würde ich die Speicherverwaltung, also wo in diesem Bereich welche > Variable liegt, dem Compiler überlassen. Das solltest du dir evtl. nochmal überlegen, denn wenn du eine neue Firmware machst, läufst du Gefahr, dass die Speicherpositionen der Parameter sich ändern und dann nach einem Firmware-Upgrade Blödsinn rauskommt. Ich würde in so einem Fall das Layout lieber explizit vorgeben. > Ich nutze die Cube-IDE mit dem gcc-Compiler. Es gibt die Möglichkeit, bei > der Variablendeklaration eine „section“ anzugeben, allerdings scheint es > für das BKP keine eigene Sektion zu geben. Muß ich dazu das Linker-Skript > ändern und gibt es dafür ein Tool? Ein weiteres Problem: statische > Variablen werden beim Systemstart ja automatisch genullt, was beim NV-RAM > natürlich nicht sinnvoll ist. Läßt sich die Initialisierung abschalten? Ist denn das NV-RAM überhaupt in den Adressraum des Controllers gemappt? Sonst wird das eh nicht funktionieren.
"Im STM32F4" heißt ausgeschrieben "In DEM STM32F4", da gibt's leider etliche Varianten ... Die RTC_BKPxR sind schon im normalen Addressbereich drin, allerdings können die nur Word-weise (also 32 Bit) angesprochen werden. Und nach einem System Reset sind die erstmal gegen Schreiben verriegelt, also selbst wenn da eine Initialisierung versucht würde ... Der Zugriff ist also etwas eingeschränkt, außerdem immer mit extra Wait-States verbunden. Sinnvollerweise legt man also die ganzen Parameter als Variablen im normalen RAM an (als eine große struct?!) und kopiert den ganzen Block (4-byte aligned!) mit memcpy oder so in die RTC_BKPxR hinein und heraus. Außerdem muss das ganze TAMPER-Zeugs deaktiviert bleiben, sonst ... Aber wie üblich: steht alles im RM drin, man muss halt darin nachlesen.
~/STM32Cube/Repository/STM32Cube_FW_F4_V1.27.1/Projects/STM32F410xx-Nucl eo/Examples/RTC/RTC_Calendar/Src Ist doch genau das was das RTC Beispiel demonstriert, oder?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.