Forum: Compiler & IDEs Makefile - wie flash nach oben begrenzen


von Sebastian__ (Gast)


Lesenswert?

Hallo,
ich habe in einem Controller einen Bootloader.
Der Bootloader ist bei den AVR Controllern ja am ende des Flashbereichs.
Sprich wenn ich einen 512W Booloader habe muss ich dafür sorgen das 
meine Applikation nicht größer als FlashMax-512W wird.
Wie kann ich das Makefile dahingehend ändern das ich sozusagen meinen 
Flashbereich eingrenzen kann. Es geht halt darum das sich beide Bereiche 
nicht überschneiden und ich einen Fehler vom Compiler/ erhalte wenn es 
zu solchen kommt.

MfG
Sebastian

von Frank (Gast)


Lesenswert?

Im Linkerscript gibts idr eine region "flash" oder ähnlich. Da kannst du 
die Größe einstellen.

von Sebastian__ (Gast)


Lesenswert?

eine Region "flash" oder ähnliches habe ich im Makefile nicht gefunden.
Lediglich im inkludierten Prozessortfile einen FLASHEND Marker.
Den wollte ich aber nicht verändern, da ich dann das definitionsfile 
lokal anlegen müsste und statt #include <avr/io.h> dann #include 
"iom8.h" (mega8) schreiben müsste.
Das Würde zwar gehen ist aber nicht so schön wie über das makefile.

Sebastian

von Εrnst B. (ernst)


Lesenswert?

Du könntest versuchen dem Linker die Lage deines Bootloaders 
mitzuteilen, z.B.

LDFLAGS += -Wl,--section-start=.bootloader=0x500

ob dabei aber auch automatisch das section-ende für das Hauptprogram 
festegelegt wird, musst du ausprobieren. (evtl noch --check-sections mit 
angeben)

/Ernst

von Sebastian__ (Gast)


Lesenswert?

Danke für die Tips,
ich habe es jetzt so gelöst:

Makefile:
LDFLAGS += ,--section-start=.flashend=0x1150

C Code:
const unsigned char ver _attribute_ ((section (".flashend"))) =0xAA;

Somit habe ich am ende des Flashs 1Byte verbraucht was ich als endmarker 
benutze.
Wenn Sich die Sections überlappen gibt es einen Fehler.
Wenn ich den Maker bzw. das eine Byte nicht Setzte, gibt es keine Fehler 
vom Compiler.
Aber so geht es.

Sebastian

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.