Forum: Compiler & IDEs Bitte Hilfe: Installation schlägt fehl :-(


von UBoot-Stocki (Gast)


Lesenswert?

Hi,

da hab ich nun endlich mal Zeit mich mit dem AVR-GCC zu beschäftigen und 
nun das:

Ich habe, wie auf dieser Seite beschrieben, alle notwendigen Daten 
heruntergeladen und entpackt. Selbstverständlich habe ich in der 
Autoexec.bat (Windoof 98) die notwendigen Einträge gemacht und gebootet. 
Beim Compilieren der vorgestellten Testprogramme bekomme ich immer 
folgende Fehlermeldung:

***

C:\avrgcc\gcctest\gcctest1>make
avr-gcc -c -g  -Os -Wall -Wstrict-prototypes -Wa,-ahlms=gcctest1.lst 
-mmcu=at90s4433 -I. gcctest1.c -o gcctest1.o
avr-gcc  gcctest1.o   -Wl,-Map=gcctest1.map,--cref -mmcu=at90s4433 -o 
gcctest1.elf
avr-objcopy -O avrobj -R .eeprom gcctest1.elf gcctest1.obj
avr-objcopy -O ihex      -R .eeprom gcctest1.elf gcctest1.hex
elfcoff gcctest1.elf coff gcctest1.cof gcctest1.sym
Ended
cp coff/gcctest1.cof .
cp coff/* ./AVRGCC/BIN/cp: `coff/gcctest1.c' and `./gcctest1.c' are the 
same file
C:\AVRGCC\BIN\MAKE.EXE: *** [gcctest1.cof] Error 256

C:\avrgcc\gcctest\gcctest1>

***

Es werden folgende Dateien erzeugt:

***

C:\avrgcc\gcctest\gcctest1>dir

 Volume in drive C is HARDDISK
 Volume Serial Number is 3891-601B
 Directory of C:\avrgcc\gcctest\gcctest1

.              <DIR>        28.06.02   0:53 .
..             <DIR>        28.06.02   0:53 ..
GCCTEST1 C           1.193  26.01.00  18:20 gcctest1.c
GCCTEST1 O           2.872  04.08.02  17:48 gcctest1.o
MAKEFILE               958  04.08.02  17:31 makefile
GCCTEST1 LST         8.749  04.08.02  17:48 gcctest1.lst
GCCTEST1 MAP        10.198  04.08.02  17:48 gcctest1.map
GCCTEST1 ELF         4.942  04.08.02  17:48 gcctest1.elf
GCCTEST1 OBJ           660  04.08.02  17:48 gcctest1.obj
GCCTEST1 HEX           373  04.08.02  17:48 gcctest1.hex
COFF           <DIR>        04.08.02  17:48 coff
GCCTEST1 COF         2.101  04.08.02  17:48 gcctest1.cof
GCCTEST1 SYM        51.059  04.08.02  17:48 gcctest1.sym
        10 file(s)         83.105 bytes
         3 dir(s)        4.793.89 MB free
***

Wo ist das beschriebene ROM-File? und wo ist die ASM-Datei ?

Frage: Ist das nun OK so ? Ist die .hex-Datei nun mein "Programm" ?

Ich bin im Moment etwas ratlos...


Also: Kann jemand bitte Licht in das Dunkel bringen ...

Gruß

UBoot-Stocki

von Peter (Gast)


Lesenswert?

> Wo ist das beschriebene ROM-File? und wo ist die ASM-Datei ?

Ein ROM-File wird nicht produziert. Eine ASM-Datei gibt es eigentlich 
auch nicht, aber wenn Du mal einen Blick in die gcctest1.lst wirfst, 
siehst Du den C Code zusammen mit den daraus erzeugten 
Assemblerbefehlen. Dort findest Du sozusagen die Information, wie der 
Compiler den C-Code umsetzt.

Frage: Ist das nun OK so ? Ist die .hex-Datei nun mein "Programm" ?

Nun ja, wieso cp diesen Fehler bringt, weiss ich nicht genau. Scheinbar 
hast Du mehrfach die selbe Source compiliert und daher sind die beiden 
Dateien gleich und cp meckert das an. Ist aber kein Problem. Das 
Ergebnis ist die .hex Datei, die kann nun direkt in den AVR geladen 
werden (z.B. mit PonyProg o.ä.).

Gruss,

Peter

von UBoot-Stocki (Gast)


Lesenswert?

Hallo Peter,

.hex und .lst sind nun klar. Der Fehler kommt nach wie vor noch. 
Selbstredend habe ich alle Dateien in den Test-Verzeichnissen vor dem 
(Re-)Compilieren gelöscht. Wenn man das vergisst, merkt MAKE das und 
compiliert NICHT neu.

Frage: Was soll den cp eigenlich machen? Aus dem was cp --help ausspuckt 
werde ich nicht schlau ...

Kann es sein, daß in meinem (Lieferumfang-)Makefile zweimal "cp" 
ausgeführt wird (siehe output von make im ersten Posting) ? Kan das der 
Grund sein ? Wozu ´braucht man das ?

Gruß

UBoot-Stocki

von Peter (Gast)


Lesenswert?

Also um das cp brauchst Du dich eigentlich garnicht zu kümmern. 
Bekanntlich kommt der gcc aus der Linux-Welt und um ihn bequem auf die 
Windows-Welt zu portieren, hat man einige Unix Kommandos mit 
hinübergenommen. cp ist nur der copy-Befehl des Linux, mehr nicht. Und 
der merkt wohl, dass man eine Datei sozusagen mit sich selbst oder mit 
einer identischen Kopie überschreiben will und meckert herum. Wie schon 
gesagt, wenn ein .hex-file erscheint hat die Kompilation geklappt. Bei 
allen weiteren Problemen liegt die Ursache dann ca. 70cm vor dem 
Bildschirm ;-)

mit :-) Gruss,

Peter

von UBoot-Stocki (Gast)


Lesenswert?

Hi,

das mir gcc und Linux ist schon klar - das mit den 70cm auch ;-) Da ich 
aber nichts anderes gemacht habe, als "installiert", müßte dieses 
Problem bei anderen ja auch schon aufgetreten sein ?

Ist halt unschön ... Wie kann man es den abstellen ? Zu welchem Zweck 
wird denn da kopiert ?

Gruß

UBoot-Stocki

von Peter (Gast)


Lesenswert?

Also zunächst mal, das mit der Kopiererei ist schon notwendig. Was 
kopiert wird, siehst Du ja in der Ausgabe. Es wird z.B. die .cof Datei, 
die die Debugging-Info entält, vom Arbeitsverzeichnis ./coff in Dein 
Arbeitsverzeichnis kopiert und noch ein paar andere Dinge. Ich nehme mal 
stark an, das Problem bei dir liegt am Makefile.
Welche Version des avrgcc verwendest Du denn und woher stammt das 
Makefile? Hast Du eventuell eine neue Version des avrgcc und alte 
Versionen der gcctest-Dateien? Im Unterverzeichnis avrgcc/bin findest Du 
eine Windows-Hilfedatei zu make, schau dir die mal genau an und 
überprüfe mal das Makefile, vielleicht klärt sich dann ja einiges.
Es gibt übrigens eine recht neue und verbesserte Version des avrgcc 3.02 
bei www.avrfreaks.net zum download. Hast du diese schon?

Gruss,

Peter

von Peter (Gast)


Lesenswert?

> Selbstredend habe ich alle Dateien in den Test-Verzeichnissen vor dem 
(Re-)Compilieren gelöscht.

Also das brauchst Du nicht zu tun! Wenn die Dinge richtig laufen, stellt 
avrgcc das selbst fest wenn sich etwas geändert hat und er macht 
automatisch nur die Teile neu, bei denen das notwendig ist. Vielleicht 
liegt ja darin dein Problem begraben!


Gruss,

Peter

von UBoot-Stocki (Gast)


Lesenswert?

Hallo,

vielen Dank für Euere Tipps. Ich habe die Version 3.02 installiert. Es 
trat ebenfalls die oben beschriebene Problematik auf. Danach habe ich 
ein wenig rumgestöbert und final die folgenden Zeilen in der Datei 
..\avrfreaks\avr_make

%.cof: %.elf
  $(ELFCOF) $< $(OUT) $@ $*.sym
  $(CP) $(OUT)/$@ .
  $(CP) $(OUT)/* .
#  $(CP) $(OUT)/*.sym .
#  $(CP) $(OUT)/*.S .

auf folgende Zeilen abgeändert

%.cof: %.elf
  $(ELFCOF) $< $(OUT) $@ $*.sym
#  $(CP) $(OUT)/$@ .
#  $(CP) $(OUT)/* .
  $(CP) $(OUT)\\*sym .
  $(CP) $(OUT)\\*cof .

Es werden somit nur die .cof und .sym-Dateien aus dem coff-Verzeichnis 
wieder in das darunterliegende Kopiert.

Wie folgender Output zeigt, ist der Fehler nun weg:

C:\avrgcc\gcctest\gcctest1>make
avr-gcc -c -g  -Os -Wall -Wstrict-prototypes -Wa,-ahlms=gcctest1.lst 
-mmcu=at90s4433 -I. gcctest1.c -o gcctest1.o
avr-gcc  gcctest1.o   -Wl,-Map=gcctest1.map,--cref -mmcu=at90s4433 -o 
gcctest1.elf
avr-objcopy -O avrobj -R .eeprom gcctest1.elf gcctest1.obj
avr-objcopy -O ihex      -R .eeprom gcctest1.elf gcctest1.hex
elfcoff gcctest1.elf coff gcctest1.cof gcctest1.sym
Ended
cp coff\\*sym .
cp coff\\*cof .
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" 
--change-section
-lma .eeprom=0 -O ihex   gcctest1.elf gcctest1.eep
avr-size gcctest1.elf
   text    data     bss     dec     hex filename
    128       0       0     128      80 gcctest1.elf
Errors: none

Im Moment funktioniert das ...

Frage: Sieht jemand Probleme, wenn ich das so lasse ???

Gruß und nochmals Danke

UBoot-Stocki

von Peter (Gast)


Lesenswert?

Wie ich sehe, bist Du extrem lernfähig! Also ich habe diese Macke nun 
bei mir auch festgestellt, besser gesagt, sie ist mir nun aufgefallen. 
Wie ich vermutet hatte, lag das Problem in Makefile, besser gesagt in 
der Datei avr_make, die ja praktisch ein include des normalen Makefile 
darstellt. Ich wüsste allerdings mal gerne, was folgende Zeile macht, 
die Du ja auch auskommentiert hast.

# $(CP) $(OUT)/$@ .
Meiner Meinung nach lag das Problem nämlich nur in der Zeile

 $(CP) $(OUT)/* .

die kopiert nämlich alles aus dem coff-Verzeichnis ins 
Arbeitsverzeichnis. Aber ich denke mal, wenn Du mit dieser Änderung 
keine Nachteile feststellst, wird das schon so ok sein. Ich sehe soweit 
kein Problem.

Gruss,

Peter

von Peter (Gast)


Lesenswert?

Ach ja, folgendes fällt mir noch ein. Wenn Du schon die neueste Version 
des avrgcc installiert hast, da haben sie endlich mal die Reihenfolge 
der Parameter bei outp korrigiert. Es gibt nun nämlich zwei neue 
Befehle, und zwar:

outb(PORT,byte_val)
outw(PORT,short_int_val)

um endlich mal Kompatibilität mit den übrigen Befehlen zu schaffen. 
Finde ich gut so!

Gruss,

Peter

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ich kann nur empfehlen: vergesst das Makefile von Volker Oth und 
schreibt euch euer eigenes. Das ist im Idealfall nur ein paar Zeilen 
lang.

von Peter (Gast)


Lesenswert?

@Andreas

Ich glaube, die Empfehlung ist garnicht mal so verkehrt. Wenn man nur 
nicht so faul wäre ... ;-)

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.