Forum: Compiler & IDEs Fehlermeldung bei neuem Compiler


von Martin M. (martin69)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe bisher mit einem ca. 2 Jahre alten GNU-Compiler gearbeitet. Nun 
bin ich auf die dumme Idee gekommen, den neuen zu instalieren 
(WinAVR-20070525-install.exe).

Der hat etliche "Unschönheiten" im Quellcode angemeckert, die den alten 
Compiler nicht gestört haben. Die Fehler habe ich soweit beseitigt. Nun 
kommt noch folgende Meldung beim Compilieren:


> "make.exe" all
avr-gcc -g -Wall -Os -mmcu=atmega128    -c -o master.o master.c
avr-gcc -g -Wall -Os -mmcu=atmega128  -Wl,-Map,master.c.map -o 
master.c.elf master.o
avr-objdump -h -S master.c.elf > master.c.lst
avr-objcopy -j .text -j .data -O ihex master.c.elf master.c.hex
avr-objcopy -j .text -j .data -O binary master.c.elf master.c.bin
avr-objcopy -j .text -j .data -O srec master.c.elf master.c.srec
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex 
master.c.elf master.c_eeprom.hex
avr-objcopy: there are no sections to be copied!
avr-objcopy: --change-section-lma .eeprom=0x00000000 never used
make.exe: *** [master.c_eeprom.hex] Error 1

> Process Exit Code: 2
> Time Taken: 00:04



Was genau ist denn nun das Problem für den einen Fehler? Hat es was mit 
dem EEPROM zu tun? Es handelt sich um ein ATMEGA128.

Ich habe auf meinem Entwicklungsrechner die alte Compiler-Version drauf 
gelassen, falls was schief läuft. Die hat nun das selbe Problem. Die 
Installation des neuen Compilers hat den alten Compiler anscheinend 
"verbogen", obwohl er in einem anderen Pfad installiert wurde.

Das AVR-Studio stürzt nun auch mit einer Fehlermeldung ab (siehe 
Anhang). Ich vermute es liegt auch an dem Fehler beim Compilieren...


Gruß
Martin

von Andreas K. (a-k)


Lesenswert?

Könnte sein, dass du ein neues Studio brauchst.

von Uhu U. (uhu)


Lesenswert?

Sieht aus, wie ein Exception im Compiler.

Ich würde beide Compiler deinstallieren und dann den neuen neu 
aufsetzen.

von Martin M. (martin69)


Lesenswert?

Ich komme mit dem neuen AVR-Studio nicht ganz klar, daher verwende ich 
das alte. Aber trotzdem bringt der Compiler diese Meldung. Ich denke ich 
muß erst mal die Sache mit dem Compilerfehler lösen. Wenn dann das alte 
AVR-Studio immer noch abstürzt, dann werde ich mich wohl an das neue 
gewöhnen müssen.

Ich habe den neuen Compiler erst auf meinem neuen PC drauf gespielt 
(nicht der Entwicklungsrechner). Dort ist der alte Compiler nicht 
installiert gewesen. Daran kann es nicht liegen. Mit dem habe ich das 
selbe Problem...

von Thomas B. (yahp) Benutzerseite


Lesenswert?

avr-objcopy: there are no sections to be copied!
avr-objcopy: --change-section-lma .eeprom=0x00000000 never used

Soweit ich das letztens hatte, ist das das Problem mit dem neuen Winavr, 
wenn es keine Daten fürs EEPROM gibt. Trat bei mir auf beim make der 
avrlib. Zur Lösung hilft in Block 9 des Makefiles bei %.eep ein Minus 
vor $(OBJCOPY)


%.eep: %.elf
  -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" 
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@

Normalerweise steht da kein Minus davor. OBJCOPY ist mit avr-objcopy 
belegt.

Die Idee habe ich hier aus dem Forum, weil das objcopy Sorgen hätte, 
wenn kein eep-File existiert. Ich schätze, du musst deine Makefiles 
entsprechend anpassen.

von Martin M. (martin69)


Angehängte Dateien:

Lesenswert?

Hallo Thomas,

hab das nicht so ganz verstanden. Hier mein Makefile im Anhang. Kannst 
Du mir dieses bitte ändern?

Mit dem ATMEGA128 hatte ich bisher auch immer das Problem, daß das 
EEPROM bei jedem Ladevorgang vom neu compilierten File gelöscht wurde. 
Beim ATMEGA 88 hatte ich dieses Problem nicht. Vielleicht ist damit dann 
auch dieses Problem gelöst...

von Thomas B. (yahp) Benutzerseite


Angehängte Dateien:

Lesenswert?

Geändert nach obigem Schema. Einfach mal probieren. Für die ganzen 
Kniffe zu Make und der Toolchain müssen allerdings mal die Profis ran.

von Johannes M. (johnny-m)


Lesenswert?

Martin Müller wrote:
> Ich komme mit dem neuen AVR-Studio nicht ganz klar, daher verwende ich
> das alte. Aber trotzdem bringt der Compiler diese Meldung. Ich denke ich
> muß erst mal die Sache mit dem Compilerfehler lösen. Wenn dann das alte
> AVR-Studio immer noch abstürzt, dann werde ich mich wohl an das neue
> gewöhnen müssen.
Die 2007er WINAVR-Versionen laufen nur mit AVRStudio 4.13! Die alten 
Versionen unterstützen das nicht.

von Martin M. (martin69)


Lesenswert?

@ Thomas:

mit dem neuen Makefile steigt die Anzahl der Fehler:


> "make.exe" all
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex 
master.c.elf master.c_eeprom.hex
avr-objcopy: there are no sections to be copied!
avr-objcopy: --change-section-lma .eeprom=0x00000000 never used
make.exe: [master.c_eeprom.hex] Error 1 (ignored)
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O binary 
master.c.elf master.c_eeprom.bin
avr-objcopy: there are no sections to be copied!
avr-objcopy: --change-section-lma .eeprom=0x00000000 never used
make.exe: [master.c_eeprom.bin] Error 1 (ignored)
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O srec 
master.c.elf master.c_eeprom.srec
avr-objcopy: there are no sections to be copied!
avr-objcopy: --change-section-lma .eeprom=0x00000000 never used
make.exe: [master.c_eeprom.srec] Error 1 (ignored)
avr-gcc -g -Wall -Os -mmcu=atmega128   -Wl,-Map,master.c.map  eeprom.c 
ehex ebin esrec   -o eeprom
eeprom.c: In function 'EEPROM_read':
eeprom.c:54: error: 'EECR' undeclared (first use in this function)
eeprom.c:54: error: (Each undeclared identifier is reported only once
eeprom.c:54: error: for each function it appears in.)
eeprom.c:54: error: 'EEWE' undeclared (first use in this function)
eeprom.c:57: error: 'EEAR' undeclared (first use in this function)
eeprom.c:59: error: 'EERE' undeclared (first use in this function)
eeprom.c:67: error: 'EEDR' undeclared (first use in this function)
avr-gcc: ehex: No such file or directory
avr-gcc: ebin: No such file or directory
avr-gcc: esrec: No such file or directory
make.exe: *** [eeprom] Error 1

> Process Exit Code: 2
> Time Taken: 00:00


Nun kennt der Compiler nicht mal mehr die Registernamen für die 
EEPROM-Routinen.




@ Johannes:
dann muß ich mich wohl an die neue Version gewöhnen...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Martin Müller wrote:

> Nun kennt der Compiler nicht mal mehr die Registernamen für die
> EEPROM-Routinen.

Hast du denn

#include <avr/io.h>

nicht drin?  Dort stehen diese Namen drin.

<avr/eeprom.h> kennst du, ja?

von Martin M. (martin69)


Lesenswert?

#include <avr/io.h> war drin, bisher aber nur in der Hauptdatei 
"master.c". Nun habe ich #include <avr/io.h> auch in meine 
EEPROM-Funktionsdatei kopiert.

Immer noch ein Fehler beim Compilieren:


> "make.exe" all
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex 
master.c.elf master.c_eeprom.hex
avr-objcopy: there are no sections to be copied!
avr-objcopy: --change-section-lma .eeprom=0x00000000 never used
make.exe: [master.c_eeprom.hex] Error 1 (ignored)
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O binary 
master.c.elf master.c_eeprom.bin
avr-objcopy: there are no sections to be copied!
avr-objcopy: --change-section-lma .eeprom=0x00000000 never used
make.exe: [master.c_eeprom.bin] Error 1 (ignored)
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O srec 
master.c.elf master.c_eeprom.srec
avr-objcopy: there are no sections to be copied!
avr-objcopy: --change-section-lma .eeprom=0x00000000 never used
make.exe: [master.c_eeprom.srec] Error 1 (ignored)
avr-gcc -g -Wall -Os -mmcu=atmega128   -Wl,-Map,master.c.map  eeprom.c 
ehex ebin esrec   -o eeprom
avr-gcc: ehex: No such file or directory
avr-gcc: ebin: No such file or directory
avr-gcc: esrec: No such file or directory
make.exe: *** [eeprom] Error 1

> Process Exit Code: 2
> Time Taken: 00:00




Ich glaube da muß ich mal einen Spezialist fragen. Wo finde ich 
Spezialisten für den GNU-Compiler? Am besten einer, der das 
Compilerprogramm mit entwickelt hat...

Gruß
Martin

von Thomas B. (yahp) Benutzerseite


Lesenswert?

> mit dem neuen Makefile steigt die Anzahl der Fehler:

Das hat mit der Änderung aber nichts zu tun, wie du hier siehst:

> make.exe: [master.c_eeprom.bin] Error 1 (ignored)

Hier rattert er nämlich über die Stelle drüber, an der du vorher hängen 
geblieben bist.

> eeprom.c:54: error: 'EECR' undeclared (first use in this function)
> Nun kennt der Compiler nicht mal mehr die Registernamen für die
> EEPROM-Routinen.

Da ist jetzt jedenfalls nicht mehr objcopy dran schuld... Eher ein 
Problem mit Includefiles etc.

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
Noch kein Account? Hier anmelden.