Warum funktioniert es nicht.

Gast #2679112
Guten Abend Allerseits,

ich habe ein harte Nuss zu knacken ...

Mein Projekt stammt von Herrn Ulrich Radig von seiner homepage:


http://www.ulrichradig.de/home/index.php/avr/dcf77_uhr

ich habe den CPU Typ Atmega8 mit 8Mhz eingestellt
aber das Programm will einfach nicht compiliert werden.
Sieht jemand den Fehler .. ich verzweifele allmälig.

Thorsten




> "make.exe" all

-------- begin --------
avr-gcc (WinAVR 20100110) 4.3.3
Copyright (C) 2008 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.


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

Linking: main.elf
avr-gcc -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=main.o  -std=gnu99 -MMD -MP -MF 
.dep/main.elf.d main.o --output main.elf -Wl,-Map=main.map,--cref 
-lm
main.o: In function `main':
C:\Dokumente und Einstellungen\Thorsten\Desktop\Ulrich Radig DCF 
77\SourceCode1_6/main.c:22: undefined reference to `usart_init'
C:\Dokumente und Einstellungen\Thorsten\Desktop\Ulrich Radig DCF 
77\SourceCode1_6/main.c:28: undefined reference to `Start_Clock'
C:\Dokumente und Einstellungen\Thorsten\Desktop\Ulrich Radig DCF 
77\SourceCode1_6/main.c:30: undefined reference to `usart_write_P'
C:\Dokumente und Einstellungen\Thorsten\Desktop\Ulrich Radig DCF 
77\SourceCode1_6/main.c:35: undefined reference to `usart_write_P'
make.exe: *** [main.elf] Error 1

> Process Exit Code: 2
> Time Taken: 00:01
Gast #2679117
>aber das Programm will einfach nicht compiliert werden.

Naja, main.c wird doch fehlerfrei compiliert.
Der Linker kann einige der aufgerufenen Funktionen nicht finden:

>77\SourceCode1_6/main.c:22: undefined reference to `usart_init'
>77\SourceCode1_6/main.c:28: undefined reference to `Start_Clock'
>77\SourceCode1_6/main.c:30: undefined reference to `usart_write_P'
>77\SourceCode1_6/main.c:35: undefined reference to `usart_write_P'

>Sieht jemand den Fehler .. ich verzweifele allmälig.

In C wird jede .c Datei für sich betrachtet.
Damit man Irgendwas aus anderen .c Dateien nutzen kann
Deklariert man selbiges in .h Dateien die per #include in der .c landen.
Dadurch weiss der Compiler was es gibt und unter anderem
welche Parameter z.b. eine Funktion hat.

Erst der Linker baut aus den Einzelteilen (.o) ein ganzes (.elf).
Dir fehlt also eine .o in der die gesuchten Funktionen drin sind.
Also sag deiner Entwicklungsumgebung das sie neben main.c
noch die fehlende .c mit compilieren soll.
Die dazugehörige .h hast du ja bereits irgendwo in der main.c
per #include verbaut.
#2679118
@tim
da Dumme ist, dass im Makefile folgendes steht:
1
TARGET = main
2
SRC = $(TARGET).c clock.c usart.c
Das Projekt sollte also eigentlich ohne Probleme gebaut werden können.
Warum fehlt denn bitte bei einem "make all" usart.o?
Füttern wir gerade einen Troll?

Gruß Oliver
Gast #2679120
Hallo Guten Abend,

Tim schrieb:

> Erst der Linker baut aus den Einzelteilen (.o) ein ganzes (.elf).
> Dir fehlt also eine .o in der die gesuchten Funktionen drin sind.
> Also sag deiner Entwicklungsumgebung das sie neben main.c
> noch die fehlende .c mit compilieren soll.
> Die dazugehörige .h hast du ja bereits irgendwo in der main.c
> per #include verbaut.

und wo mache ich diese Einstellung ? im Makefile ?

Thorsten
Gast #2679123
Du musst nur das Original-Makefile aus dem dcf77_uhr-Verzeichnis von 
ulrichradig.de verwenden und alle im Verzeichnis enthaltenen *.c Files 
in das gleiche Verzeichnis entpacken, dann werden alle benötigten Files 
durch die folgende Makefilezeile:

# List C source files here. (C dependencies are automatically 
generated.)

SRC = $(TARGET).c clock.c usart.c


eingebunden.

Wenn du mit dem AVR-Studio arbeitest findest auf der folgenden page ein 
Bsp.-Makefile für mehrere c-Qellfile
http://www.robotik-projekt.de/index.php/programmierung-einrichten-von-avr-studio/

Hans Peter
Gast #2679159
Thorsten schrieb:
> ich habe ein harte Nuss zu knacken ...

Das war bei einem Blick auf den Titel des Threads schon klar
>Re: Warum funktioniert es nicht.

Bei einem so nichtssagenden Titel ist allerdings nicht verwunderlich, 
wenn da nicht allzuviele reingucken.
Gast #2679211
@Hans Peter B.

vielen Dank Hans Peter. Wie die genauen zusammenhänge mit dem Makefile
sind muss ich noch lernen. Ich bin blutiger Anfänger in C.

Ich werde mal auf dieser Seite suchen, ob jemand vieleicht eine Art Wiki
zum Thema Makefile geschrieben hat.


Jedenfalls vielen Dank !



@...

Du hast Recht mit dem Titel. Ich war Gestern nur total frustriert
das es nicht funktioniert und habe an WINAVR gezweifelt.



Thorsten

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.