WinAvr: Testprogramm compilieren schlägt fehl

Gast #581973
Lesenswert?

Hallo an alle.
Ich versuche einen Atwega48 zu programmieren und wollte erst mal die 
compilierchain mittels eines Testprogs zu durchlaufen, welches ich
aus dem Tutorial habe.

#include <avr/io.h>          // (1)

int main (void) {            // (2)

   DDRB  = 0xff;             // (3)
   PORTB = 0x03;             // (4)

   while(1) {                // (5a)
     /* "leere" Schleife*/;  // (5b)
   }                         // (5c)

   /* wird nie erreicht */
   return 0;                 // (6)
}



Ich erhalte jedoch folgenden Kompilierfhler.

------------------------------------------------------------------------ 
--
> "make.exe" all

Compiling C: test.c
avr-gcc -c -mmcu=atmega48 -I. -gdwarf-2 -DF_CPU=8000000UL -O0 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=./test.lst  -std=gnu99 -Wundef -MMD -MP 
-MF .dep/test.o.d test.c -o test.o

Compiling C: ../test1/test.c
avr-gcc -c -mmcu=atmega48 -I. -gdwarf-2 -DF_CPU=8000000UL -O0 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=./../test1/test.lst  -std=gnu99 -Wundef 
-MMD -MP -MF .dep/test.o.d ../test1/test.c -o ../test1/test.o

Linking: test.elf
avr-gcc -mmcu=atmega48 -I. -gdwarf-2 -DF_CPU=8000000UL -O0 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=test.o  -std=gnu99 -Wundef -MMD -MP -MF 
.dep/test.elf.d test.o ../test1/test.o --output test.elf 
-Wl,-Map=test.map,--cref     -lm
../test1/test.o: In function `main':
../test1/test.c:7: multiple definition of `main'
test.o:../test1/test.c:7: first defined here
make.exe: *** [test.elf] Error 1

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

------------------------------------------------------------------------ 
--

Die Makefile ist im gleichen Verzeichnis wie das c-prog.

nutze winavr20070525

Ich bitte um Hilfe.
Danke im Voraus!
Angehängte Dateien:
#582060
Lesenswert?

> Compiling C: test.c
> ...
> Compiling C: ../test1/test.c

Du hast 2 Files im makefile eingetragen
Einmal das test.c auf dem aktuellen Verzeichnis und
ein zweitesmal die Datei ../test1/test.c

Und ich rate jetzt mal ins Blaue hinein:
In beiden Files gibt es jeweils eine Funktion main()


#582079
Lesenswert?

----------------------------------------------------
Du hast 2 Files im makefile eingetragen
Einmal das test.c auf dem aktuellen Verzeichnis und
ein zweitesmal die Datei ../test1/test.c
-----------------------------------------------------

das was du meinst ist aber 2 mal die gleiche datei




Im makefile soll doch einmal der dateiname ohne endung (TARGET = test) 
und einmal die datei inklusive pfadangegeben (SRC = $(TARGET).c 
../test1/test.c) angegeben werden, so wie ich das verstanden habe.
und diese ist jewils test.c

und wenn ich eins von beiden nicht eintrage, tauchen wieder kompilier 
fehler auf?

#582086
Lesenswert?

Amir B-a wrote:
> ----------------------------------------------------
> Du hast 2 Files im makefile eingetragen
> Einmal das test.c auf dem aktuellen Verzeichnis und
> ein zweitesmal die Datei ../test1/test.c
> -----------------------------------------------------
>
> das was du meinst ist aber 2 mal die gleiche datei

Das ist wurscht, denn im Linker

> avr-gcc -mmcu=atmega48 -I. -gdwarf-2 -DF_CPU=8000000UL -O0
> -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall
> -Wstrict-prototypes -Wa,-adhlns=test.o  -std=gnu99 -Wundef -MMD -MP -MF
> .dep/test.elf.d test.o ../test1/test.o --output test.elf

                  ****** ***************

taucht dann 2 mal die gleiche Datei auf, was mit Sicherheit
Probleme geben wird.

Du musst an deinem Makefile arbeiten.

> Im makefile soll doch einmal der dateiname ohne endung (TARGET = test)
> und einmal die datei inklusive pfadangegeben (SRC = $(TARGET).c
> ../test1/test.c) angegeben werden, so wie ich das verstanden habe.

Das $(TARGET).c  ist doch schon die Datei. TARGET ist ein
Platzhalter und expandiert zu test. Damit steht dann da

SRC = test.c ../test1/test.c

und somit hast du 2 Source code files angegeben. Du brauchst aber
nur eines.

An der SRC Vorgabe brauchst du dich nur vergreifen, wenn dein
komplettes Projekt aus mehr als einem *.c File besteht. Ansonsten
lässt man die in Ruhe.
#582097
Lesenswert?

Amir B-a wrote:
>> An der SRC Vorgabe brauchst du dich nur vergreifen, wenn dein
>> komplettes Projekt aus mehr als einem *.c File besteht. Ansonsten
>> lässt man die in Ruhe.
>
> ohne der src vorgabe geht es aber auch nicht!

Ich sag ja nicht, dass du sie komplett rausnehmen sollst.

SRC = $(TARGET).c

So stands ursprünglich mal drinn. Und wenn man nur 1 *.c
hat, gibt es keinen Grund daran was zu ändern

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