Forum: Compiler & IDEs avr-gcc mit ubuntu


von Fritz (Gast)


Lesenswert?

Hallo

Ich hab's jetzt endlich geschafft einen einfachen Quellcode unter ubuntu 
(Linux) zu kompilieren. Allerdings erhalte ich ganz zum Schluss eine 
Fehlermeldung. die hex Datei wird aber trotzdem angelegt.



fritz@Fritz:~/avr/diverses$ make all

-------- begin --------
avr-gcc (GCC) 4.1.0
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is 
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR 
PURPOSE.


Size before:
main.elf  :
section    size      addr
.text       266         0
.data         4   8388704
.bss          0   8388708
.noinit       0   8388708
.eeprom       0   8454144
.stab      1704         0
.stabstr   1727         0
Total      3701




Compiling: main.c
avr-gcc -c -mmcu=atmega16 -I. -gstabs   -O0 -fsigned-char 
-funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=main.lst  -std=gnu99 
-Wp,-M,-MP,-MT,main.o,-MF,.dep/main.o.d main.c -o main.o
main.c:17: warning: return type of ‘main’ is not ‘int’

Linking: main.elf
avr-gcc -mmcu=atmega16 -I. -gstabs   -O0 -fsigned-char 
-funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=main.o  -std=gnu99 
-Wp,-M,-MP,-MT,main.o,-MF,.dep/main.elf.d main.o   --output main.elf 
-Wl,-Map=main.map,--cref    -lm

Creating load file for Flash: main.hex
avr-objcopy -O ihex -R .eeprom main.elf main.hex

Creating load file for EEPROM: main.eep
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
        --change-section-lma .eeprom=0 -O ihex main.elf main.eep

Creating Extended Listing: main.lss
avr-objdump -h -S main.elf > main.lss

Creating Symbol Table: main.sym
avr-nm -n main.elf > main.sym

Converting to AVR Extended COFF: main.cof
avr-objcopy --debugging --change-section-address .data-0x800000 
--change-section-address .bss-0x800000 --change-section-address 
.noinit-0x800000 --change-section-address .eeprom-0x810000  -O 
coff-ext-avr main.elf main.cof
avr-objcopy: main.cof: Invalid bfd target
avr-objcopy: --change-section-vma .eeprom+0xff7f0000 nie benutzt
avr-objcopy: --change-section-lma .eeprom+0xff7f0000 nie benutzt
avr-objcopy: --change-section-vma .noinit+0xff800000 nie benutzt
avr-objcopy: --change-section-lma .noinit+0xff800000 nie benutzt
avr-objcopy: --change-section-vma .bss+0xff800000 nie benutzt
avr-objcopy: --change-section-lma .bss+0xff800000 nie benutzt
avr-objcopy: --change-section-vma .data+0xff800000 nie benutzt
avr-objcopy: --change-section-lma .data+0xff800000 nie benutzt
make: *** [extcoff] Fehler 1


Was hat das zu bedeuten?

Vielen Dank

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


Lesenswert?

Fritz wrote:

> Was hat das zu bedeuten?

Dass du mit einem unsinnig alten Makefile-Template arbeitest (AVR COFF
hat man nur für alte AVR Studios gebraucht sowie braucht es noch für
VMlab), und dass die Ubuntu-Maintainer den AVR-COFF-Patch offenbar nicht
für nötig erachtet haben zu integrieren.

Das legt aber den Schluss nahe, dass sie auch andere Patches nicht
integriert haben werden, d. h. du wirst gegenüber den ,,Marktführern''
WinAVR, den FreeBSD-Ports und Bingo600s Build-Script (*) immer im
Nachteil bleiben.

(*) 
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=42631

von Fritz (Gast)


Lesenswert?

Also ehrlich gesagt versteh ich jetzt nur Bahnhof!

Brauch ich ein anderes makefile, oder was? Ist das erzeugte hex file 
jetzt brauchbar oder nicht?

Was heißt jetzt "altes Makefile-Template"? Alt in Bezug auf was? An der 
Architektur des ATmega16 wird sich in den letzen Jahren nicht viel 
verändert haben.

Vielen Dank erst mal.

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


Lesenswert?

Fritz wrote:
> Brauch ich ein anderes makefile, oder was?

Ja, oder avr-binutils, die AVR-COFF erzeugen können (Patch notwendig).
Das würdest du benötigen, falls du die Datei im AVR-COFF-Format wirklich
brauchst.  Der genannte Build-Script von Bingo600 holt sich die dafür
notwendigen Patches (und noch weitere, die dir wahrscheinlich ebenso
fehlen).

> Ist das erzeugte hex file
> jetzt brauchbar oder nicht?

Das hat damit nichts zu tun, das wird aus dem ELF-File generiert.
Das COFF-File würde ebenso aus dem ELF-File generiert (nur dass dieser
Schritt bei dir nicht funktioniert).

> Was heißt jetzt "altes Makefile-Template"? Alt in Bezug auf was?

AVR-COFF als Dateiformat ist praktisch (bis auf VMlab, aber das wird
nicht mehr gepflegt) “obsolet”, wie das so schön auf Neudeutsch heißt.
Google sollte dir darüber sicher was erzählen können, was es damit
auf sich hat.

von Fritz (Gast)


Lesenswert?

OK, danke.

Ich brauch eigentlich nur das hex file. Welches makefile wäre denn da 
geeignet?

Vielen Dank

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.