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
>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.
@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
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
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
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.
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.