Forum: Mikrocontroller und Digitale Elektronik Probleme mit Variablen bei C


von XC866 (Gast)


Lesenswert?

Hallo zusammen.

Ich habe noch ein kleines Problem beim C Programmieren. Ich programmiere 
denn XC866 (8051-Familie). Das Programm ist uVision3.
Die Initialisierung habe ich mit DaVE gemacht. Ich habe diese Sachen 
initialisiert: ADC,UART,IO,T2.
Bei Project Workspace wird das jetzt so dargestellt:

Main.C
ADC.C
UART.C
T2.C
IO.C

Jetzt zu meinem Problem.
Wie muss ich das machen das ich eine Variable über alle Programmteile 
gebrauchen kann? z.B. Beim T2 habe ich einen Zähler(int Zaehler), mit 
diesem möchte ich im Main.C weiterarbeiten.
Dann kommt aber der Fehler "undefined identifiere".
Der ganze Rest funktioniert eigentlich ganz gut.

Gruss und Danke
Matthias

von Johnny (Gast)


Lesenswert?

Am besten machst Du zur Datei T2.c noch eine Header Datei a la T2.h, in 
der Du die betreffenden funktionen per extern forwärtsdeklarierst:

T2.h:

#ifndef T2_H
  #define T2_H
  extern int Zaehler
#endif

Diese Headerdatei kannst Du dann ins Main.c includen und dann ist der 
Zähler auch im Main verfügbar.

Also:

Main.c:

#include "T2.h"

von Johnny (Gast)


Lesenswert?

Sorry, bei "extern int Zaehler" fehlt noch ein ;

von XC866 (Gast)


Lesenswert?

Hallo

Danke für die Antwort. Hat schon funktioniert. Muss ich im C File com T2 
den Eintrag int zaehler; so lassen. Wenn ich ihn lösche kommen 
Warnungen. Es funktioniert aber wenn ich den Eintrag dort stehen lasse.

Gruss und Danke

von Johnny (Gast)


Lesenswert?

Bitte, bitte.

Ja, Du musst den Eintrag dort stehen lassen.
Aber am besten includest Du die Datei T2.h auch noch in T2.c.

T2.c:

#include "T2.h"

Der Grund ist, dass der Compiler dann die richtigen Fehlermeldungen 
ausgibt, falls die Vorwärtsdeklaration vom Headerfile T2.h nicht mit der 
tatsächlichen Definition in T2.c übereinstimmt.

Wie gesagt ist das im Headerfile nur eine Vorwärtsdeklaration, darum 
brauchts noch die eigentliche Deklaration der Variablen im T2.c File, 
also "int Zaehler;".

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.