Hallo,
ich habe Probleme beim Einbinden von externen Bibliotheken ins AVR-Studio 4.
Hier als Beispiel:
Die Dateien uart.h und uart.c habe ich in das Projektverzeichnis kopiert und den Verzeichnissen "Source Files" und "Header Files" im AVR-Studio hinzugefügt.Code:#include <avr/interrupt.h> // Wird nur gebraucht bei der Interrupt-Version #include "uart.h" // Einen 0-terminierten String übertragen. void uart_puts (const char *s) { do { uart_putc (*s); } while (*s++); } // Ein Zeilenumbruch, abhängig davon, was die Gegenstelle haben will // Windows: "rn" // Linux : "n" // MacOS : "r" #define CR "\r\n" char text[] = "Hallo Welt." CR; int main() { uart_init(2400); sei(); // Wird nur gebraucht bei der Interrupt-Version uart_puts (text); uart_puts ("Hallo Welt!" CR); return 0; }
Als Makefile benutze ich das vom Studio selbst generierte.
Wenn ich jetzt aber compilieren möchte spuckt der Compiler folgenden Text aus:
Vermute mal, dass ich irgend etwas bei der Verwendung der Bibliotheken nicht verstanden habe.Build started 1.9.2011 at 03:06:36
avr-gcc -I"C:\Users\...\Documents\Versuche\..\..\Desktop\Li bs\UART Lib" -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT CVersuche.o -MF dep
/CVersuche.o.d -c ../CVersuche.c
avr-gcc -I"C:\Users\...\Documents\Versuche\..\..\Desktop\Li bs\UART Lib" -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT uart.o -MF dep/uart
.o.d -c ../uart.c
avr-gcc -mmcu=atmega8 -Wl,-Map=Versuche.map CVersuche.o uart.o -o Versuche.elf
uart.o: In function `uart_puts':
C:\Users\...\Documents\Versuche\default/../uart.c:447: multiple definition of `uart_puts'
CVersuche.o:C:\Users\...\Documents\Versuche\defaul t/../CVersuche.c:6: first defined here
make: *** [Versuche.elf] Error 1
Build failed with 1 errors and 0 warnings...
Könnt ihr mir sagen, wo der Fehler ist und wie es richtig funktioniert?
LG Kimba
Nein, du hast Probleme mit deinem Code:
Die Fehlermeldung besagt, dass du zwei Funktionen nachmens uart_puts implementiert hast, einmal in Zeile 447 von uart.c und einmal am Anfang von CVersuche.c
C mag es nicht, wenn eine Funktion mit gleichem Namen zweimal vorkommt (außer sie ist als statisch deklariert, dann kann sie nur innerhalb der aktuellen Quelltextdatei verwendet werden).
Fehlermeldungen sind dazu da, dass man sie liest!
mfG
Markus
PS: Ich bin mir mit der statischen Deklarierung gerade nicht 100% sicher, da müsste ich vorher nochmal nachsehen, ich meine aber dass es so ist.
Lesezeichen