Hallo, ich möchte mit Studio5.1 den nutzbaren Flashbereich (ATMega16U4) so verringern, das der Bootloaderbereich (0x3000...) geschütz bleibt. Bedingt durch den Bootloader verringert sich der nutzbare Flashbereich auf 12k. Der Compiler/Linker warnt jedoch erst, wenn der gesamtbereich (16k) überschritten wird. Der Code(Flash) wird soweit ich das sehe über die section .text definiert. Kann man z.B. section .text=0..0x2FFF für den Linker definieren? Besten Dank
Hans M. schrieb: > Kann man z.B. section .text=0..0x2FFF für den Linker > definieren? Könnte man, indem man einen eigenen Linkerscript benutzt. Es genügt aber auch völlig, wenn du nach dem Compilieren hin und wieder mal manuell auf die Zahlen guckst. ;-)
Beitrag "Re: AVRStudio: Anzeige verbrauchter Speicher" Deine Variante mit Verändern der .text section size (=Manipulieren der Linker Control Scripts) wäre mir zu heiss/aufwändig. Ich versuche unter allen Umständen Dateien der Toolchain im Originalzustand zu lassen.
> Könnte man, indem man einen eigenen Linkerscript benutzt.
Wo und wie könnte dies dann gemacht werden, ich habe verschiedene
Scripts schon gefunden, aber ich möchte dies Projekt abhängig gestalten.
Krapao schrieb: > Ich versuche unter > allen Umständen Dateien der Toolchain im Originalzustand zu lassen. Ich würde sie ja auch nicht in der Toolchain ändern. Hans M. schrieb: > Wo und wie könnte dies dann gemacht werden, Ist eine Option, die man dem Linker mitgibt. > ich habe verschiedene > Scripts schon gefunden, aber ich möchte dies Projekt abhängig gestalten. Das wiederum geht nicht (bzw. nicht sinnvoll). Du willst schließlich nicht, dass das nächste Projekt, das dann für einen ATmega1281 ist, auch auf 12 KiB für .text limitiert wird. ;-) Die Linkerscripts gibt's nur einmal pro (toolchain-interner) Architekturvariante. Selbst, wenn sie pro MCU-Typ wären, hätte es aber keinen Sinn, das global und projektunabhängig ändern zu wollen: weder ist von vornherein sicher, dass der Bootloader im nächsten Projekt mit einem ATmega16U4 auch wieder 4 KiB benötigt (vielleicht willst du ihn dort lieber auf 2 KiB runterzwängen, um fürs eigentliche Projekt 14 KiB zu haben?), noch ist sicher, ob das nächste Projekt denn überhaupt einen Bootloader hat.
> Ist eine Option, die man dem Linker mitgibt.
wäre dies dann über -Wl section .text=?????
möglich und wie würde die Anweisung aussehen?
Hans M. schrieb: >> Ist eine Option, die man dem Linker mitgibt. > > wäre dies dann über -Wl section .text=????? Nein, das legt die Startadresse der section fest (die Option heißt ja --section-start). -Wl ist aber erstmal richtig, das weist den Compiler an, die nachfolgende Option an den Linker durchzuschieben. > möglich und wie würde die Anweisung aussehen? http://sourceware.org/binutils/docs/ld/Scripts.html#Scripts
vielen Dank für die schnellen Hinweise, ich schaue mir den Link jetzt mal in Ruhe an.
@ Jörg
> Ich würde sie ja auch nicht in der Toolchain ändern.
Meine Antwort war nicht auf deine bezogen. Ich hatte nur zu lange
getrödelt und die Threadanzeige vorm Absenden nicht aktualisiert. So ist
dein Beitrag dazwischen gerutscht.
Gemäß http://www.nongnu.org/avr-libc/user-manual/using_tools.html wird für atmega16u4 die "Emulation" avr5 verwendet. Der folgender Befehl
1 | avr-ld -m avr5 |
zeigt dann das zugehörige "linker script" an. Die Ausgabe in eine Datei umleiten, und dort im "memory layout" die Größe der "Flash/ROM/text"-Region anpassen:
1 | MEMORY |
2 | { |
3 | text (rx) : ORIGIN = 0, LENGTH = 12K |
4 | ... |
Das neue "linker script" dann mittels -T projektspezifisch bei den LDFLAGS angeben. Dann bricht der Linker ab, wenn der Code nicht mehr in die "text section" passt:
1 | /usr/lib/gcc/avr/4.3.5/../../../avr/bin/ld: build/demo-gpio-atmega8-4.3.5.elf section `.text' will not fit in region `text' |
2 | /usr/lib/gcc/avr/4.3.5/../../../avr/bin/ld: region `text' overflowed by 7330 bytes |
So müsste es gehen, getestet habe ich das nicht, denn es ist ziemlich sinnvoll, den Linker nicht abbrechen zu lassen. Das "wertlose" weil zu große Kompilat hilft bei der Minimierung des Speicherbedarfs, da es sich mit avr-nm analysieren lässt. Insofern bestünde die andere Möglichkeit darin, ein Skript zu bauen, welches die Ausgabe von avr-size auswertet. Das Skript kann dann z. B. in einem Makefile ggf. den Build-Vorgang abbrechen.
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.