Hallo! Ich bekomme unter Eclipse die Meldung "region text is full", wenn ich das PN aus WinAVR nehme gehts aber...
-mmcu= fehlt beim Linken. Ich dachte, diesen Bug hätte da endlich mal jemand repariert?
-mmcu ist da. Ich poste mal wie unterschiedlich die einzelnen .c-Files kompiliert und gelinkt werden. Kompilerausgabe aus "PN"+"MFile"+"WinAVR":
1 | Compiling C: y1.c |
2 | avr-gcc -c -mmcu=atmega88 -I. -gstabs -DF_CPU=16000000UL -Os -Wall -Wstrict-prototypes -Wundef -Wunreachable-code -Wsign-compare -Wa,-adhlns=obj/y1.lst -std=gnu99 -Wundef -MD -MP -MF .dep/y1.o.d y1.c -o obj/y1.o |
Kompilerausgabe aus "Eclipse3.3"+"CDT4"+"avr-eclipse"+"WinAVR":
1 | Building file: ../y1.c |
2 | Invoking: Compiler |
3 | avr-gcc -Wall -g -O2 -Os -c -mmcu=atmega88 -DF_CPU=16000000 -o"y1.obj" "../y1.c" |
4 | Finished building: ../y1.c |
Linkerausgabe aus "PN"+"MFile"+"WinAVR":
1 | Linking: x.elf |
2 | avr-gcc -mmcu=atmega88 -I. -gstabs -DF_CPU=16000000UL -Os -Wall -Wstrict-prototypes -Wundef -Wunreachable-code -Wsign-compare -Wa,-adhlns=obj/y1.o -std=gnu99 -Wundef -MD -MP -MF .dep/x.elf.d obj/y1.o obj/y2.o obj/y3.o obj/y4.o obj/y5.o obj/y6.o obj/y7.o obj/y8.o obj/y9.o obj/y10.o obj/y11.o obj/y12.o obj/y13.o obj/y14.o obj/y15.o --output x.elf -Wl,-Map=x.map,--cref -lm |
Linkerausgabe aus "Eclipse3.3"+"CDT4"+"avr-eclipse"+"WinAVR":
1 | Invoking: Linker |
2 | avr-gcc -Wl,-Map,.map -mmcu=atmega88 -o"x.elf" ./y1.obj ./y2.obj ./y3.obj ./y4.obj ./y5.obj ./y6.obj ./y7.obj ./y8.obj ./y9.obj ./y10.obj ./y11.obj ./y12.obj ./y13.obj ./y14.obj ./y15.obj |
3 | c:\WinAVR\bin\..\lib\gcc\avr\3.4.6\..\..\..\..\avr\bin\ld.exe: region text is full (x.elf section .text) |
Nein, ich nenne meine einzelnen Files nicht x und y- meine Namen sind noch bekloppter und deshalb nicht vorzeigbar ;)
hallo,
hat vielleicht gar nicts damit zu tun, aber:
>avr-gcc -Wall -g -O2 -Os -c -mmcu=atmega88 -DF_CPU=16000000 -o"y1.obj" "../y1.c"
was bewirkt die zweimalige angabe der optimierung .. grübel
bye kosmo
Ja, über die bin ich auch gestolpert, aber das kann ich in Eclipse nicht verhindern, da ist -Os eine checkbox, also zuschaltbar zu den "normalen" Optimierungseinstellungen.
Gerade nochmal nachgeschaut: "If you use multiple ‘-O’ options, with or without level numbers, the last such option is the one that is effective." Also sollte das -Os von Eclipse das -O2 "überstimmen", weil es an letzter Stelle steht.
Was mir noch auffällt ist, dass dein Eclipse kein -lm linkt.
Bingo. Das war es. Warum wird der Code beim Hinzufügen der libm.a kleiner?
> Warum wird der Code beim Hinzufügen der libm.a kleiner?
Weil (leider) die libgcc.a manchen Code doppelt, der stattdessen
handoptimiert in der libm.a abgelegt worden ist. Historischer
Ballast. Der handoptimierte Code sollte besser in die libgcc.a
kommen, aber das war historisch rein als Folge der GCC-Lizenzpolitik
(du musst der FSF dein Copyright abtreten -- auch wenn das nach
deutschem Recht, glaub' ich, null und nichtig ist :) praktisch nicht
möglich.
Mit der von Дмитрий Хмельков (Dmitry Xmelkov) neu geschriebenen
libm, die in avr-libc ab Version 1.6 vorhanden sein wird, sehe ich
aber gute Chancen, dass man diesen historischen Fehler reparieren
kann.
Na, zum Glück werden dann ja "von Hand gelinkte" libraries bevorzugt. Das -lm hätten die "avr-eclipse" Leute ja dann eigentlich auch als Standard setzen können. Ok, ich bedanke mich für die tolle Hilfe hier- da kommt man doch gerne öfters mal vorbei ;)!
Heiko wrote: > Das -lm hätten die "avr-eclipse" Leute ja dann eigentlich auch als > Standard setzen können. Ja, sag ihnen das mal. Das ist auf jeden Fall sinnvoll.
> Weil (leider) die libgcc.a manchen Code doppelt, der stattdessen > handoptimiert in der libm.a abgelegt worden ist. Wo findet man diese Geheimnisse dokumentiert?
> Wo findet man diese Geheimnisse dokumentiert?
``All documentation files usually end up in ".c".''
(Unbekannter Autor)
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.