Forum: Mikrocontroller und Digitale Elektronik Problem mit header files


von Simon (Gast)


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
von Krapao (Gast)


Lesenswert?

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
von Simon (Gast)


Lesenswert?

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
von Krapao (Gast)


Lesenswert?

> Das ist doch ausreichend?

Nein.
von Simon (Gast)


Lesenswert?

Kannst du mir sagen was ich noch hinzufügen muss?
von Krapao (Gast)


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).
von Simon (Gast)


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
von Klaus W. (mfgkw)


Lesenswert?

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.
von Simon (Gast)


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
von Simon (Gast)


Lesenswert?

Und wenn ich das debuggen will, kommt immer der Fehler:

undefined reference to 'Test'
von Krapao (Gast)


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.
von Simon (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.