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

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