mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Globale Variable Keil


Autor: Matze (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich versuche gerade eine Globale Variable zu Deklarieren die in
mehreren .c Dateien verwendet werden soll.

In der main.c habe steht folgende Initialisierung
volatile unsigned  int A=0;

Im Header: (application.h)
extern volatile unsigned int A;

In der Klasse wird der Header includiert:
#include<Application.h>

Beim Linken bekomme ich die Fehlermeldungen:
Unresolved external Symbol
Reference made to unresolved external Symbol

Woran kann das ligen?

Das Programm läuft auf einem 80C164CI.
Programmiert wird mit uVision4.

Gruss Matze.

Autor: MeinerEiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das könnte ein Problem sein, da das A in der main nicht das gleiche A 
wie aus der .h ist. Wenns das gleiche sein soll, in der main nur A = 0; 
zuweisen. Ohne Typ, ohne volatile davor.

Autor: MeinerEiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag: Weiteres Problem könnte #include<Application.h> sein.
Hier mal #include "Application.h" verwenden, da er bei < > nur im 
Verzeichnis vom Compiler sucht.

Autor: Matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei Initialisierung ohne Datentyp und Volatile verändet sich nichts an 
den Fehlern.
Auch (#include "Application.h") bewirkt keine Veränderung.

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst mal solltest du nicht in der Application.h und in den .c Dateien, 
welche diese Datei benutzen (include), die Includes doppelt aufführen. 
Wenn du die Includes in der Application.h drin hast, dann bekommen diese 
auch die .c Datei, welche diese benutzt. Oder du machst die Includes 
immer nur in den .c Dateien und nicht in den .h Dateien. Dies ist mir 
bei der Application.c aufgefallen, welche ebenfalls noch mal sämtliche 
Include Direktiven beinhaltet.

Die Syntax mit #include <..> ist beim Keil Compiler korrekt und er sucht 
alle Header Dateien die sich im gleichen Verzeichnis wie die .C Dateien 
befinden.

Und das beim Compilieren die Variable "A" nicht gefunden wird ist auch 
ganz einfach zu erklären. Du hast per "extern" Befehl in der 
Application.h zwar diese Variable dateiübergreifend bekannt gemacht, 
aber mehr auch nicht. Du musst diese Variable vorher erst mal 
deklarieren in einer .c Datei mit "volatile unsigned int A;" da 
ansonsten diese Variable überhaupt nicht existiert. Zumindest in deinem 
Beispielcode kann ich nirgendwo diese Deklaration der Variable finden.

Ciao,
     Rainer

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.