mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVRStudio - Probleme mit globalen Variabeln


Autor: Hannes E. (k1ngarthur) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein kleines Problem.
In meinem Projekt habe ich in AVR Studio 4 mehrere Sourcefiles angelegt.
Ich habe jedoch einige globale Variabeln, die verschiedene Funktionen 
aus mehreren Sourcefiels benutzen.
Bis jetzt habe ich diese in einem eigenen Header-File abgelegt.
Wenn ich das Headerfile jetzt aber in die Sourcefiles einbinde, bekomme 
ich die Meldung, dass die Variabeln mehrfach definiert sind.
Nehme ich das Headerfile, aus den Sourcefiels heraus, die Probleme 
verursachen, bekomme ich die Meldung, dass die Variabeln cniht definiert 
sind.
Kann mir da jemand helfen?

 --- Auschnitt aus dem Headerfile ---
// ----------------------------------------------------------------
// GLOBALE VARIABELN
// ----------------------------------------------------------------

// ----------------------------------------------------------------
// INCLUDES
#include <inttypes.h>
// ----------------------------------------------------------------

#ifndef VARS_H
#define VARS_H
// ----------------------------------------------------------------
// STURKTUREN

// Farbstruktur
struct color_struc{

  ...

};

// Zeit-Struktur
struct time_struc{

  ...

};
// ----------------------------------------------------------------


// ----------------------------------------------------------------
// GLOBALE VARIABELN
uint8_t flash_time = 0;          

...

// Eigene Struktutvariabeln
struct time_struc timestamp;

...


struct color_struc led_color;

...

// ----------------------------------------------------------------

#endif

 --- Die Fehlermeldung ---
pcf8583.o: In function `get_year':
D:\1_personal 
files\4_programme\3_atmel\dev\MP3_Wecker\default/../pcf8583.c:35: 
multiple definition of `flash_time'
firmware.o:D:\1_personal 
files\4_programme\3_atmel\dev\MP3_Wecker\default/../firmware.c:47: first 
defined here

Das Headerfile ist sowohl in firmware.c und pcf8583.c über
#include "vars.h"
eingebunden

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach im Headerfile nur die Deklaration der structs und deklariere die 
globalen Variablen als extern. Nimm in dein Projekt eine zusätzliches 
C-file z.B. globals.c auf und dort machst du die Definition der eben 
als extern deklarierten Variablen. Dann sind die globalen Variablen an 
einer einzigen Stelle.

Autor: Hannes E. (k1ngarthur) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
p.s.: Habe mir gerade mal den Beitrag:
Beitrag "Globale Variablen, mehrere Dateien"
angesehen, und das entsprechend geändert. Funktioniert aber immer noch 
nicht :-(

Autor: Hannes E. (k1ngarthur) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Mach im Headerfile nur die Deklaration der structs und deklariere die
> globalen Variablen als extern. Nimm in dein Projekt eine zusätzliches
> C-file z.B. globals.c auf und dort machst du die Definition der eben
> als extern deklarierten Variablen. Dann sind die globalen Variablen an
> einer einzigen Stelle.

Danke funktioniert!

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.