www.mikrocontroller.net

Forum: Compiler & IDEs AVR Projekt: Zugriff auf Funktionen eines anderen c-files


Autor: Furo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so:
funktionsname(parameter)

;-)

Du musst allerdings noch eine Headerdatei anlegen:
zweiteDatei.h

und dort von der Funktion den Prototypen reinschreiben:

z.B. int funktionsname(int paramter1);

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Konkret:

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


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

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

int main (void)
{
Funktion1();

while(1){..}
return 0;
}

Autor: G. L. (sprintersb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie gesagt schreibt man ein Header-File, zB foo.h
#ifndef _FOO_H_
#define _FOO_H_ /* vermeidet Probleme bei Mehrfach-Includes */

#define WERT_1 0x1

typedef struct
{
   ...
} data_t;

extern void foo (void);

extern int zahl;

#endif /* _FOO_H_ */

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

int zahl = 12;

void foo (void)
{
   zahl = WERT_1;
}

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

int main()
{
   foo();

   if (zahl != WERT_1)
      ...
}

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

Alternativ kann auch alles zusammen übersetzt werden
xxx-gcc <optionen> foo.c bar.c -o foobar.elf

Autor: Furo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Furo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha .... sonderlich schlauer bin ich jetzt jedoch nicht.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Aha .... sonderlich schlauer bin ich jetzt jedoch nicht.

Poste doch einfach mal deinen kompletten Code.

Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder mal ein gutes C-Buch lesen...

Autor: Marco G. (stan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.