mehrere C files einbinden

OP #1259576
Lesenswert?

Moin,
hab en Problem mehrere C Files beim AVR Studio 4.16 einzubinden. Wenn 
ich das Unterprogramm in die main.c schreiben funktioniert es ohne 
Probleme. Beim Auslagern in ein anderen c File bekomme ich immer den 
gleichen Error angezeigt. (Steht in dem angehängten txt file)
Kann mir da jemand einen Rat geben?
Hab auch schon andere Beiträge gelesen aber bin nicht schlau draus 
geworden. Steh vll auch auf nem großen schlauch.

Gruß
Hendrik
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #1259609
Lesenswert?

> Hab auch schon andere Beiträge gelesen aber bin nicht schlau draus
> geworden. Steh vll auch auf nem großen schlauch.
Die anderen (neuen, ausgelagerten) C-Files gehören ins Projekt (bzw. 
Makefile) eingebunden. Und nur die Funktionsköpfe werden dem C-File, in 
dem sie verwendet werden, bekannt gemacht (z.B. über Header-Dateien).
OP #1259628
Lesenswert?

Sven P. schrieb:
> Ich rate mal ganz blind:
> Du hast die 'ausgelagerte' C-Datei nachher mit
>
1
> #include "blabla.c"
2
>
> eingebunden.


Ja das hab ich gemacht. Ist doch nicht falsch,oder?

Das man die neue C-Datei in den Makefile einbinden muss ist mir bekannt 
und beim AVR Studio 4.16 wird das auch automatisch gemacht. Hab 
nachgeschaut.

Gruß Hendrik
Gast #1259665
Lesenswert?

>Das man die neue C-Datei in den Makefile einbinden muss ist mir bekannt
>und beim AVR Studio 4.16 wird das auch automatisch gemacht. Hab
>nachgeschaut.

Ebend (tm).

Weil das Studio das schon automatisch macht, brauchst (bzw. darfst) du 
das File nicht noch extra per include in main einbinden. Der linker baut 
dir das alles schon zusammen, ganz automatisch.

Oliver
OP #1259668
Lesenswert?

Oliver schrieb:
>>Das man die neue C-Datei in den Makefile einbinden muss ist mir bekannt
>>und beim AVR Studio 4.16 wird das auch automatisch gemacht. Hab
>>nachgeschaut.
>
> Ebend (tm).
>
> Weil das Studio das schon automatisch macht, brauchst (bzw. darfst) du
> das File nicht noch extra per include in main einbinden. Der linker baut
> dir das alles schon zusammen, ganz automatisch.
>
> Oliver

Ok also muss ich nur die neue C-Datei bei Source Files einbinden und 
sonst nichts mehr machen? Auch kein Header mehr erstellen?

Gruß Hendrik
#1259678
Lesenswert?

Doch Header brauchst du.

In C gilt die Regel: Verwendet werden darf nur was bekannt ist

wenn du also einen Funktionsaufruf machen willst, muss der Compiler 
wissen, dass es diese Funktion gibt.
Das erreicht man mit einem Prototypen (einer Funktionsdeklaration)

File: Funktion.h
1
void foo( void );

File: Funktion.c
1
#include "Funktion.h"
2

3
void foo( void )
4
{
5
  // mach was
6
}

File: main.c
1
#include "Funktion.h"
2

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

Funktion.c und main.c fügst du zu den Source Files im AVR STudio hinzu. 
Funtion.h fügst du im AVR Studio zu den HEader Files hinzu

Siehe auch:
http://www.mikrocontroller.net/articles/FAQ#Ich_hab_da_mehrere_.2A.c_und_.2A.h_Dateien._Was_mache_ich_damit.3F
OP #1259685
Lesenswert?

Ok. So klappts.
Jetzt hab ich nur noch ne Frage.
wenn ich jetzt im Main.c z.B. schreibe #define TAKT 8000000UL und will 
dann in der anderen C-Datei auf die Konstante TAKT zugreifen funkt das 
auch nicht!?
Wenn der Compiler das Einfügen der neuen C-Datei selbst übernimmt, wann 
bindet er die dann in die Main.c ein. Ich müsste ja dann bevor der 
Compiler die neue C-Datei einbindet die Konstante definieren, damit das 
Unterprogramm in der neuen C-Datei über TAKT bescheid weis.
Oder geht das nur indem ich #define TAKT 8000000UL in die neue C-Datei 
schreibe?

Gruß
Hendrik
#1259700
Lesenswert?

Hendrik Ebert schrieb:

> wenn ich jetzt im Main.c z.B. schreibe #define TAKT 8000000UL und will
> dann in der anderen C-Datei auf die Konstante TAKT zugreifen funkt das
> auch nicht!?

Logisch.
C-Dateien sind voneinander unabhängig.
Wenn der Compiler eine C-Datei compiliert, weiß er nicht was in einer 
anderen C-Datei enthalten ist.

> Wenn der Compiler das Einfügen der neuen C-Datei selbst übernimmt,

Das macht nicht der COmpiler.
Dem AVR Studio musst du die C-Datei nur deshlab bekannt geben, damit 
AVR-Studio dafür sorgt, dass auch diese Datei compiliert wird.

C selbst kennt keine Projektverwaltung. Das macht erst die IDE, in 
deinem Fall AVR Studio. Insbesonder weiss der Compiler nichts von einem 
Projekt. Für ihn existiert immer nur das eine C-File welches er gerade 
compiliert.

> Compiler die neue C-Datei einbindet die Konstante definieren, damit das
> Unterprogramm in der neuen C-Datei über TAKT bescheid weis.

Solche übergreifenden Konstanten schreibt man normalerweise in eine 
Header-Datei, die dann überall #include-d wird.

Im Falle der Taktfrequenz gibt es auch noch folgende Möglichkeit:
In den Projekteinstellungen im AVR Studio gibst du deine Taktfrequenz 
an. AVR-Studio sorgt dann dafür, dass für jedes C-File, welches 
compiliert wird, die Makrokonstante F_CPU mit genau diesem Wert zur 
Verfügung steht.

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