[C] Sehe den Fehler nicht - multiple definition of "flag"

OP #2996412
Lesenswert?

Hallo zusammen,
ich sehe da den Fehler nicht. Füge einfach mal den betreffenden Code 
ein.

Timer.h
1
#ifndef TIMER_H_
2
#define TIMER_H_
3

4
volatile uint8_t flag = 0;
5

6
void InitialTimer(void);
7
ISR (TIMER0_OVF_vect);
8

9

10

11
#endif /* TIMER_H_ */

Timer.c
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include "Timer.h"
4

5
uint8_t count = 0;
6

7

8
void InitialTimer(void)
9
{
10
  // Timer 0 konfigurieren
11
  TCCR0B = ((1<<CS00)|(1<<CS02)); // Prescaler 8 <-- Hier zeigt der Fehler hin.
12
  
13
  // Overflow Interrupt erlauben
14
  TIMSK0 |= (1<<TOIE0);
15
}
16

17

18
ISR (TIMER0_OVF_vect)
19
{
20
  if (count == 30)
21
  {
22
    //PORTD ^= (1<<PD0);
23
    flag = 1;
24
    count = 0;
25
  }
26
  count++;
27
}

Main.c
1
// µC Frequenz
2
#define F_CPU 8000000UL
3

4
... 
5

6
#include <avr/io.h>
7
#include <util/delay.h>
8
#include <avr/interrupt.h>
9
#include "Timer.h"
10

11

12
int main(void)
13
{
14
  ...
15

16
         InitialTimer();
17
  sei();
18
  
19
  ...
20
  
21
  // Beginn der Hauptschleife
22
  while(1)
23
  {    
24
    if (flag == 1)
25
    {
26
      DATAPORT ^= (1<<PD0);
27
      flag = 0;
28
    }
29
                  ...    
30
  }
31
}

Ich muss doch, wenn ich eine Variable nicht nur innerhalb einer 
Quelldatei nutzen möchte, die in der Header Datei angeben. Das 
funktioniert soweit auch, das mir Intellisens die Variable anbietet, 
wenn ich in der main.c die Header Datei einbinde.

Nur warum meckert der Compiler, das ich die Variable in folgender Zeile 
doppelt definiere.
1
TCCR0B = ((1<<CS00)|(1<<CS02)); // Prescaler 8

Wo muss ich meine Gedanken noch ordnen, das es funktioniert?

Grüße
Stephan
OP #2996431
Lesenswert?

Peter Dannegger schrieb:
> Man muß die Meldung auch mal lesen.
> Da steht ganz genau drin, welches File,Zeile er anmeckert und wo es
> zuerst steht.
Peter, klar hab ich den Fehler gelesen und auch verstanden was mir der 
Compiler da sagen will "Doppelte Definition der Variable", aber ich hab 
mal so garnicht verstanden "Warum".

Nur deshalb hab ich da nachgefragt. Ganz auf den Kopf gefallen bin ich 
nicht und ich kann mit Compiler Fehler umgehen (C# Programmierung).
OP #2996443
Lesenswert?

B e r n d W. schrieb:
>> Nur warum meckert der Compiler
>
> Falls Du eine Variable im Header definierst, wird diese in jedem C-File,
> welcher den Header included, im Speicher angelegt. Der Linker bemerkt
> dann, dass eine globale Variable mit selbem Namen mehrfach vorhanden
> ist.

Danke, das ist eine Erklärung die verständlich ist und einleuchtet.
Ich hab schon mein C-Buch aufgeschlagen und werde mal noch da nachlesen.

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