AVR Projekt: Zugriff auf Funktionen eines anderen c-files

Gast #873557
Lesenswert?

Hallo!

Ich steh grad etwas auf dem Schlauch. Ich habe ein Projekt im AVR Studio 
angelegt. Unter Source-File habe ich zwei c-Files mit unterschiedlichen 
Funktionen (nur eine hat die main-funktion). Wie greife ich nun aber von 
einer Funktion aus dem einem c-File auf eine Funktion des andere c-Files 
zu?

Danke für eure Hilfe.

Gruß
Furo
Gast #873565
Lesenswert?

Mache ein header-file für das eine c-file und "include" es dann im 
anderen. In diesem header-file schreibst Du dann den Prototypen zu 
Deiner Funktion, die Du im anderen File verwenden willst.
Gast #873573
Lesenswert?

Konkret:

Im ersten c-File:
test.c
1
void Funktion1 (void)
2
{
3
 //Code
4
}

Dann dazu test.h:
1
extern void Funktion1 (void);

Dann kannst Du im main.c:
1
#include "test.h"
2

3
int main (void)
4
{
5
Funktion1();
6

7
while(1){..}
8
return 0;
9
}
#873581
Lesenswert?

Wie gesagt schreibt man ein Header-File, zB foo.h
1
#ifndef _FOO_H_
2
#define _FOO_H_ /* vermeidet Probleme bei Mehrfach-Includes */
3

4
#define WERT_1 0x1
5

6
typedef struct
7
{
8
   ...
9
} data_t;
10

11
extern void foo (void);
12

13
extern int zahl;
14

15
#endif /* _FOO_H_ */

und in foo.c
1
#include "foo.h"
2

3
int zahl = 12;
4

5
void foo (void)
6
{
7
   zahl = WERT_1;
8
}

und in bar.c
1
#include "foo.h"
2

3
int main()
4
{
5
   foo();
6

7
   if (zahl != WERT_1)
8
      ...
9
}

Die einzelnen Module können separat compiliert wergen mit gcc und später 
gelinkt
1
xxx-gcc <optionen> -c foo.c -o foo.o 
2
xxx-gcc <optionen> -c bar.c -o bar.o 
3
xxx-gcc <optionen> foo.o bar.o -o foobar.elf

Alternativ kann auch alles zusammen übersetzt werden
1
xxx-gcc <optionen> foo.c bar.c -o foobar.elf
Gast #873604
Lesenswert?

Oh, irgendwie ist das bei mir wohl zu arg verschachtelt.
Da die Funktion der c-Klasse die aufgerufen werden will wieder von 
Methoden abhängt, die in Header-Files definiert sind, die wiederum in 
der "Main-Klasse" eingebunden werden.
Binde ich nun die Header-Files in dem zweiten c-File ein, kommen auch 
viele Meldungen der doppelten Defintion...
Persönliche Seite #873614
Lesenswert?

> Da die Funktion der c-Klasse die aufgerufen werden will wieder von
> Methoden abhängt, die in Header-Files definiert sind, die wiederum in
> der "Main-Klasse" eingebunden werden.

Du programmierst in C. Das kennt keine Klassen und keine Methoden.


> Binde ich nun die Header-Files in dem zweiten c-File ein, kommen
> auch viele Meldungen der doppelten Defintion...

In Headerdateien gehören Deklarationen, keine Definitionen.

Also keine Funktionen, sondern nur deren Prototypen.
Persönliche Seite #873761
Lesenswert?

> Binde ich nun die Header-Files in dem zweiten c-File ein, kommen
> auch viele Meldungen der doppelten Defintion...

(...)

> Aha .... sonderlich schlauer bin ich jetzt jedoch nicht.

Dann sieh Dir doch mal so eine Fehlermeldung genauer an und sieh Dir an, 
was Du wo deklariert hast und was Du wo eingebunden hast.

Verwendest Du globale Variablen? Hast Du die in der Headerdatei korrekt 
als extern deklariert?

Wie sehen Deine Funktionsprototypen aus?

Bindest Du etwa auch *.c-Dateien per #include ein?

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