WinAVR+Eclipse->region text is full

Gast #625382
Lesenswert?

-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 ;)
Gast #625386
Lesenswert?

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
Gast #625404
Lesenswert?

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.
Moderator Persönliche Seite #625445
Lesenswert?

> 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.
Gast #625482
Lesenswert?

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 ;)!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren