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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.