Hallo! Ich weiß die Frage klingt trivial aber ich komm einfach nicht weiter. Ich hab grad ein kleines Testprogramm mit AVR-Studio geschrieben und habe auch header files eingebaut. #include <avr/io.h> #include "TimeManager.h" In TimeManager.h wird eine Funktion Test deklariert die dann in TimeManager.c drin bearbeitet wird. Aber jedes Mal kommt undefined reference zur Funktion Kann mir jemand helfen. Vielen Dank Simon
TimeManager.c steht möglicherweise nicht in der Liste der Sourcefiles im aktuellen Projekts. Dann wird es nicht übersetzt und der Linker vermisst beim Zusammenbinden zum Programm alle Funktionen und Variablen aus diesem Sourcefile! http://www.mikrocontroller.net/articles/FAQ#Ich_hab_da_mehrere_.2A.c_und_.2A.h_Dateien._Was_mache_ich_damit.3F
Ich habe TimeManager im main oben ranngeschrieben mit include "TimeManager.h" Das ist doch ausreichend? Zusätzlich liegen auch die Dateien im gleichen Ordner wie das Mainfile
Angenommen du hast drei Quelldateien (2x .c und 1x .h):
1 | // main.c
|
2 | #include <avr/io.h> |
3 | #include "TimeManager.h" |
4 | int main(void) |
5 | {
|
6 | // Aufruf der Funktion test aus einem anderen Sourcefile
|
7 | test(); |
8 | while(1){} |
9 | }
|
1 | // TimeManager.h
|
2 | // Deklaration der Funktion test
|
3 | void test(void); |
1 | // TimeManager.c
|
2 | // Definition der Funktion test
|
3 | void test(void) |
4 | {
|
5 | // Hier Anweisungen der Funktion test
|
6 | }
|
In dem AVR Studio Projekt unter Source Files müssen die beiden .c Dateien eingebunden werden. Und unter Header Files die .h Datei (das macht AVR Studio aber beim ersten Build automatisch).
Danke für die ausführliche Antwort. Leider verstehe ich aber nicht wo du die Sourcefiles praktisch einbindest. Gibts da ne Funktion im AVR-Studio oder wie funktioniert es? Sorry, dass ich so frage, aber ich komm einfach nicht drauf
Wenn du nicht genauer beschreibst, was du machst, kann dir keiner helfen. Was heißt "bearbeiten"? Bitte das Problem ordentlich beschreiben, und die nötigen Programmteile liefern (korrekt!), und ggf. mit [c] formatieren.
OK! Ich habe mit AVR-Studio 5.0 ein Projekt erstellt. Dann hab ich in Main folgendes eingetragen: #include <avr/io.h> #include "TimeManager.h" int main(void) { Test(); while(1) { //TODO:: Please write your application code } } Zusätzlich habe ich ein Headerfile und ein c-File erstellt und es in den gleichen Ordner gelegt. c-file: #include <avr/io.h> #include <avr/interrupt.h> #include "TimeManager.h" void Test(void) { } h-file: #ifndef TIMEMANAGER_H #define TIMEMANAGER_H void Test(void); #endif
Und wenn ich das debuggen will, kommt immer der Fehler: undefined reference to 'Test'
> AVR-Studio 5.0 Rechtsklick auf den Ordner in dem bereits dein main.c steht. Dann ADD und Existing Item und dann in der Dateiauswahlbox zu TimeManager.c gehen und auswählen. AVR Studio 5 kopiert dann die Datei wenn nötig in dein Projektverzeichnis Wenn du später viele Bibliotheksquellen in einem Ordner gesammelt hast und nicht kopieren willst, kannst du ein Häkchen bei Add as Link machen. http://avrstudio5.wordpress.com/2011/04/12/linking-to-files-in-avr-studio-5-0/ > Und wenn ich das debuggen will, kommt immer der Fehler: > undefined reference to 'Test' Hmm heisst das jetzt, das Build (= Kompilieren und Linken) funktioniert und nur das Debuggen scheitert? Dann vergiss die Antworten bisher. Das ist dann ein anderes Problem.
Danke! Jetzt gehts endlich!!! Das AVR-Studio 5.0 ist bissel verwirrend. Danke vielmals! Wünsch dir dann noch schöne Feiertage!
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.