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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.