Atmel Studio include

Gast #3446000
Lesenswert?

Hallo,

ich arbeite mit Atmel Studio 6 und möchte die Uart Lib. von Peter Fleury 
benutzen. Nur leider lässt sich Diese nicht in mein Projekt einbinden. 
Die .c und .h Dateien habe ich beide über den Solution Explorer mit Add 
Existing Item und im Programm mit #include "uart.h" eingebunden. Leider 
bekomme ich immer die Fehlermeldung:

undefined reference to `uart_init(unsigned int)' usw.

Es wird also die komplette .c Datei nicht erkannt.

Ich habe wie verrückt nach einer Lösung gesucht, aber leider nichts 
gefunden.
Ich hoffe Ihr könnt mir weiterhelfen. In welchen Ordner kommen die 
beiden Dateien und muss ich noch was beachten?

Gruß Christian
Gast #3446139
Lesenswert?

Jetzt habe ich wirklich alles versucht. Ich bekomme es einfach nicht 
eingebunden. Header files klappen ohen Probleme. Aber die .c Datei ist 
mir ein absolutes Rätzel.

Wie bindet Ihr denn Dateien im Atmel Studio ein?

Gruß

Christian
Gast #3446148
Lesenswert?

Ist schon der richtige Weg. Eigentlich sollte sie dann automatisch 
kompiliert und gelinkt werden. Es sei denn, Du hast z.B. unter den 
Eigenschaften (Properties) der C-Datei einstellt, dass sie nicht 
kompiliert werden soll.

Mach mal ein "Rebuild Project" und kopiere die ganze Ausgabe, die im 
Output-Fenster steht.
Gast #3446249
Lesenswert?

Danke für die Antwort. Wenn ich auf den File uart.c klicke, steht unter 
Build Action: Compile. Wo kann ich das noch verstellen. Unter Toolchain?
Hier ist einmal der Output. Im Anhang noch ein Bild vom Solution 
Explorer.

Gruß

Christian

------ Build started: Project: Hauptprogramm, Configuration: Debug AVR 
------
Build started.
Project "Hauptprogramm.cppproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; 
('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Atmel Studio 
6.1\Vs\Compiler.targets" from project 
"C:\Users\Slitsch\Desktop\boot\Hauptprogramm\Hauptprogramm\Hauptprogramm 
.cppproj"  (target "Build" depends on it):
  Task "RunCompilerTask"
    C:\Program Files (x86)\Atmel\Atmel Studio 6.1\shellUtils\make.exe 
all
    Building target: Hauptprogramm.elf
    Invoking: AVR8/GNU Linker : 3.4.2
    "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 
GCC\Native\3.4.2.1002\avr8-gnu-toolchain\bin\avr-g++.exe" -o 
Hauptprogramm.elf  Hauptprogramm.o uart.o   -Wl,-Map="Hauptprogramm.map" 
-Wl,--start-group -Wl,-lm  -Wl,--end-group -Wl,--gc-sections 
-mmcu=atmega32
    Hauptprogramm.o: In function `main':
C:\Users\Slitsch\Desktop\boot\Hauptprogramm\Hauptprogramm\Debug/.././Hau 
ptprogramm.cpp(15,1):  undefined reference to `uart_init(unsigned int)'
C:\Users\Slitsch\Desktop\boot\Hauptprogramm\Hauptprogramm\Debug/.././Hau 
ptprogramm.cpp(18,1):  undefined reference to `uart_puts_p(char const*)'
C:\Users\Slitsch\Desktop\boot\Hauptprogramm\Hauptprogramm\Debug/.././Hau 
ptprogramm.cpp(22,1):  undefined reference to `uart_getc()'
C:\Users\Slitsch\Desktop\boot\Hauptprogramm\Hauptprogramm\Debug/.././Hau 
ptprogramm.cpp(28,1):  undefined reference to `uart_puts(char const*)'
C:\Users\Slitsch\Desktop\boot\Hauptprogramm\Hauptprogramm\Debug/.././Hau 
ptprogramm.cpp(33,1):  undefined reference to `uart_puts(char const*)'
C:\Users\Slitsch\Desktop\boot\Hauptprogramm\Hauptprogramm\Debug/.././Hau 
ptprogramm.cpp(34,1):  undefined reference to `uart_putc(unsigned char)'
collect2.exe(0,0): ld returned 1 exit status
    make: *** [Hauptprogramm.elf] Error 1
    The command exited with code 2.
  Done executing task "RunCompilerTask" -- FAILED.
Done building target "CoreBuild" in project "Hauptprogramm.cppproj" -- 
FAILED.
Done building project "Hauptprogramm.cppproj" -- FAILED.

Build FAILED.
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped 
==========
Gast #3446431
Lesenswert?

Sieht aus, als hättest Du ein C++-Projekt erstellt. Ist das Absicht? 
Wenn nicht, erstell das Projekt nochmal neu als C-Projekt.

Alternativ könntest Du auch die uart.c in uart.cpp umbenennen. Würde ich 
aber nicht empfehlen.
Persönliche Seite #3447533
Lesenswert?

Beim Mischen von C- und C++-Code gibt es Probleme mit dem Linker, weil 
der Compiler unterschiedliche Symbolnamen in die Objektdatei einsetzt.

Abhilfe: In der C++-Datei muss die #include-Anweisung für die die 
C-Datei beschreibende Headerdatei als extern "C" eingebunden werden. 
Damit weiß der Compiler, daß die in der Headerdatei deklarierten Symbole 
als C-Code und nicht als C++Code zu interpretieren sind.

Also in Hauptprogramm.cpp
1
#include <util/delay.h>
2
extern "C"
3
{
4
  #include "uart.h"
5
}
6

7
etc. etc.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren