Hallo Leute, ich bin recht neu im µC Bereich, habe mir nach dem aktuellen Tutorial auch mein Eclipse mit dem AVr Plugin eingerichtet, passt auch alles soweit. Wenn ich jetzt allerdings Peter Fleurys Library Kompillieren will, incl dem Beispiel bekomme ich folgenden Fehler: **** Build of configuration Debug for project SCAR **** make all Building file: ../main.c Invoking: AVR Compiler avr-gcc -Wall -g2 -gstabs -O0 -fpack-struct -fshort-enums -funsigned-char -funsigned-bitfields -mmcu=atmega16 -DF_CPU=16000000UL -MMD -MP -MF"main.d" -MT"main.d" -c -o"main.o" "../main.c" Finished building: ../main.c Building file: ../uart.c Invoking: AVR Compiler avr-gcc -Wall -g2 -gstabs -O0 -fpack-struct -fshort-enums -funsigned-char -funsigned-bitfields -mmcu=atmega16 -DF_CPU=16000000UL -MMD -MP -MF"uart.d" -MT"uart.d" -c -o"uart.o" "../uart.c" Finished building: ../uart.c Building target: SCAR.elf Invoking: AVR C Linker avr-gcc -Wl,-Map,SCAR.map -mmcu=atmega16 -o"SCAR.elf" ./main.o ./uart.o ./uart.o: In function `__vector_11': ../uart.c:248: multiple definition of `__vector_11' ./main.o:../uart.c:248: first defined here ./uart.o: In function `__vector_12': ../uart.c:291: multiple definition of `__vector_12' ./main.o:../uart.c:291: first defined here ./uart.o: In function `uart_init': ../uart.c:315: multiple definition of `uart_init' ./main.o:../uart.c:315: first defined here ./uart.o: In function `uart_getc': ../uart.c:393: multiple definition of `uart_getc' ./main.o:../uart.c:393: first defined here ./uart.o: In function `uart_putc': ../uart.c:421: multiple definition of `uart_putc' ./main.o:../uart.c:421: first defined here ./uart.o: In function `uart_puts': ../uart.c:447: multiple definition of `uart_puts' ./main.o:../uart.c:447: first defined here ./uart.o: In function `uart_puts_p': ../uart.c:461: multiple definition of `uart_puts_p' ./main.o:../uart.c:461: first defined here make: *** [SCAR.elf] Fehler 1 Ich habe jeweils nur eine uart.c, uart.h, main.c (die ehemals test_usrt.h hieß). Was spielt da verrückt?
Hab ich nicht drin! Zumindest wüsste ich nicht, wo eine zweite definition beim kopieren des Quelltextes herkommen sollte.
Okay, ich weiß nun wieso, bzw kanns mir vorstellen! Eclipse kompilliert alle Dateien und linkt sie dann. Ich habe mit meinen drei Befehlen nicht gelinkt, sondern direkt eingebunden. Könnte das die Lösung sein? Wenn ja, dann habe ich einen #include in eclipse zu viel drinne, weil das ding dann included wird UND nochmal versucht zu linken.
kann es sein das du irgendwelche *.c dateien per include einbindest?
Ja, das war der Fall, als ich manuell kompilliert habe. Die UART Library besteht aus 3 Dateien: uart.h, uart.c und test_uart.c. in die test_uart.c habe ich die uart.c zusätzlich zur uart.h eingebunden. Das hat dann in der IDE zu Fehlern geführt. Nun habe ich das Include rausgenommen und es wird perfekt gelinkt. Danke :)
Jan schrieb:
> Ja, das war der Fall, als ich manuell kompilliert habe.
das liegt aber nicht an der IDE, sondern daran das man NIE c Datein per
include einbindet.
> das liegt aber nicht an der IDE, sondern daran das man NIE c Datein per > include einbindet. Wie bindet man sonst *.c Dateien ein? Ich hab z.B.:
1 | #include <avr/interrupt.h> |
2 | #include <stdio.h> |
3 | #include <avr/io.h> |
4 | #include <util/delay.h> |
5 | #include <string.h> |
6 | #define SYSCLK 16000000
|
7 | #include "uart.c" |
mit Programmers Notepad programmiert, ohne Probleme. Mit Eclipsse scheint sowas nicht zu gehen? Wie binde ich denn dann den Inhalt der *.c Dateien ein? Gruß Knut
warum zum kuckuck willst du das machen? Der C Gott hat .h Dateien erfunden, dann nutze diese auch!!!
Ingo L. schrieb: ... > #include "uart.c" > mit Programmers Notepad programmiert, ohne Probleme. Du programmierst mit Programmers Notepad? Eher nicht. PN ist ein Editor, mehr nicht. Compilieren tut dahinter WinAVR, genauer ein Compiler und ein Linker, gesteuert von einem makefile. In das makefile schreibt man hinein, welche .c-Files alle zum Projekt gehören, und der Linker baut die dann zusammen. > Mit Eclipsse scheint sowas nicht zu gehen? > Wie binde ich denn dann den Inhalt der *.c Dateien ein? Mit Eclipse geht das ganz genauso. Nur nimmt dir das sogar noch die Arbeit ab, das makefile zu erstellen, das geht da ganz automatisch. Du musst lediglich alle .c-File dem Projektordner hinzufügen. Oliver
Sorry wenn ich zu doof bin, wenn ich meine uart. c in das projektverzeichnis packe erkennt der kopiler das nicht. Die ganzen Direktiven wie zb PORTA werden nicht mehr erkannt obwohl die Datei Links im Suchbaum auftaucht? Was mache ich falsch beim Einbinden? Wozu überhaupt ".c Files einbinden? Kann man das nicht Header Dateien stopfen? Ich bin noch nicht so sehr erfahren und sammel noch Erfahrungen Gruß Knut
Jede .c-Datei wird einzeln kompiliert, also müssen auch in jeder .c-Daten alle benötigten .h-Dateien inkludiert werden. Wenn in uart.c zb. PORTA nicht erkannt wird, bedeutet das, daß die Datei kompiliert werden soll, dort aber das #include <avr/io.h> fehlt. Oliver
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.