Forum: Mikrocontroller und Digitale Elektronik STM32F4 - Flash in verschiedene Bereiche aufteilen


von Jan B. (berge)


Angehängte Dateien:

Lesenswert?

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

von Wiederholung (Gast)


Lesenswert?


von Jan B. (berge)


Lesenswert?

Vielen Dank für den Tipp. Das hatte ich noch nicht gefunden. Ich melde 
mich mal morgen mit einem Ergebnis :)

LG Jan

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.