Guten Morgen,
ich arbeite gerade, den Flashspeicher des STM32F4 als EEPROM für
Einstellungen etc. zu nutzen. Dafür möchte ich die kleineren Sektoren
(z.B. 1&2) des Flash nutzen. Da diese allerdings früh im Adressraum
liegen, sind sie im Standard-Linkerscript für Code vorgesehen.
Ich habe also ein eigenes Linkerscript gebaut, mit dem ich Sektor 0 für
die Vektortabelle und Startup Code nutzen möchte (im C Code als
_attribute_ ((used,section(".isr_vector"))) bzw .startupCode
gekennzeichnet), Sektor 1 & 2 für Einstellungen explizit frei lassen
will und dann ab Sektor 3 den Rest des Codes zulassen möchte. Leider
läuft es nicht so wie erhofft :(
Problem 1: Linke ich mit der Option --gc-sections, wird direkt alles
verworfen (Größe der Ausgabe 0 Bytes). Hat jemand eine Idee woher das
kommt? Ich habe ja explizit mit den EXTERNs LD darauf aufmerksam
gemacht, dass es die Sections isr_vector und StartupCode gibt. Von
letzterer aus wird übrigens main() angesprungen.
Problem 2: Linke ich ohne die Option --gc-sections, es wird also aller
Code in die Ausgabe gepackt, bekomme ich die Meldung, dass die Sektion
rom_isr, welche ja eigentlich nur die Vektoren und den Startup Code
beinhalten sollte, zu klein ist für den gesamten Code (es wird eine
Routine genannt, die in der main zyklisch aufgerufen wird, aber in
keiner ISR aufgerufen wird).
Ich habe schon gut gegoogelt und verschiedene Sachen ausprobiert,
letztlich aber ohne Erfolg. Wenn jemand einen Tipp hätte, wäre ich echt
dankbar!
Liebe Grüße, Jan
Gast
#3665944
Gab es schon: Beitrag "Daten ins Flash speichern mit dem STM32"
Vielen Dank für den Tipp. Das hatte ich noch nicht gefunden. Ich melde mich mal morgen mit einem Ergebnis :) LG Jan
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.