Forum: Compiler & IDEs STM32 mit gcc: wie neue section anlegen?


von Mike (Gast)


Lesenswert?

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?

von Rolf M. (rmagnus)


Lesenswert?

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.

von A. B. (Gast)


Lesenswert?

"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.

von pegel (Gast)


Lesenswert?

~/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
Noch kein Account? Hier anmelden.