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


von Hannes E. (k1ngarthur) Benutzerseite


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 ---
1
// ----------------------------------------------------------------
2
// GLOBALE VARIABELN
3
// ----------------------------------------------------------------
4
5
// ----------------------------------------------------------------
6
// INCLUDES
7
#include <inttypes.h>
8
// ----------------------------------------------------------------
9
10
#ifndef VARS_H
11
#define VARS_H
12
// ----------------------------------------------------------------
13
// STURKTUREN
14
15
// Farbstruktur
16
struct color_struc{
17
18
  ...
19
20
};
21
22
// Zeit-Struktur
23
struct time_struc{
24
25
  ...
26
27
};
28
// ----------------------------------------------------------------
29
30
31
// ----------------------------------------------------------------
32
// GLOBALE VARIABELN
33
uint8_t flash_time = 0;          
34
35
...
36
37
// Eigene Struktutvariabeln
38
struct time_struc timestamp;
39
40
...
41
42
43
struct color_struc led_color;
44
45
...
46
47
// ----------------------------------------------------------------
48
49
#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
1
#include "vars.h"
eingebunden

von Stefan B. (stefan) Benutzerseite


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.

von Hannes E. (k1ngarthur) Benutzerseite


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 :-(

von Hannes E. (k1ngarthur) Benutzerseite


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!

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.