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
Im Linkerscript gibts idr eine region "flash" oder ähnlich. Da kannst du die Größe einstellen.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.