PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehler beim Einbinden der Header-Dateien?



Kimba
01.09.2011, 03:38
Hallo,

ich habe Probleme beim Einbinden von externen Bibliotheken ins AVR-Studio 4.
Hier als Beispiel:



#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;
}


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.
Als Makefile benutze ich das vom Studio selbst generierte.
Wenn ich jetzt aber compilieren möchte spuckt der Compiler folgenden Text aus:


Build started 1.9.2011 at 03:06:36
avr-gcc -I"C:\Users\...\Documents\Versuche\..\..\Desktop\Libs \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\Libs \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...


Vermute mal, dass ich irgend etwas bei der Verwendung der Bibliotheken nicht verstanden habe.
Könnt ihr mir sagen, wo der Fehler ist und wie es richtig funktioniert?

LG Kimba

markusj
01.09.2011, 10:24
ich habe Probleme beim Einbinden von externen Bibliotheken ins AVR-Studio 4.
Nein, du hast Probleme mit deinem Code:


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...
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.