mikrocontroller.net

Forum: Compiler & IDEs WinAVR+Eclipse->region text is full


Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Ich bekomme unter Eclipse die Meldung "region text is full", wenn ich 
das PN aus WinAVR nehme gehts aber...

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-mmcu= fehlt beim Linken.  Ich dachte, diesen Bug hätte da endlich
mal jemand repariert?

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-mmcu ist da.

Ich poste mal wie unterschiedlich die einzelnen .c-Files kompiliert und 
gelinkt werden.

Kompilerausgabe aus "PN"+"MFile"+"WinAVR":

Compiling C: y1.c
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":

Building file: ../y1.c
Invoking: Compiler
avr-gcc -Wall -g -O2 -Os -c -mmcu=atmega88 -DF_CPU=16000000 -o"y1.obj" "../y1.c"
Finished building: ../y1.c


Linkerausgabe aus "PN"+"MFile"+"WinAVR":

Linking: x.elf
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":

Invoking: Linker
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   
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 ;)

Autor: kosmonaut_pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was mir noch auffällt ist, dass dein Eclipse kein -lm linkt.

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bingo.

Das war es.

Warum wird der Code beim Hinzufügen der libm.a kleiner?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)!

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Weil (leider) die libgcc.a manchen Code doppelt, der stattdessen
> handoptimiert in der libm.a abgelegt worden ist.

Wo findet man diese Geheimnisse dokumentiert?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wo findet man diese Geheimnisse dokumentiert?

``All documentation files usually end up in ".c".''

(Unbekannter Autor)

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder "asm" ?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.