Problem mit header files

Gast #2469964
Lesenswert?
• ▲
▼
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
Gast #2469996
Lesenswert?
• ▲
▼
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).
Gast #2470023
Lesenswert?
• ▲
▼
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
Gast #2470040
Lesenswert?
• ▲
▼
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
Gast #2470092
Lesenswert?
• ▲
▼
> 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.

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.