Globale Variable wird überschrieben

OP #1249905
Lesenswert?
• ▲
▼
Hallo Leute ich habe einen PIC24HJ128GP506 und definiere mir in einer 
Headerdatei wie folgt eine globale Variable:

//########## Globale Variablen ##########
  static uint8 mode;
  static uint8 direction;

in einer initfunktion gebe ich ihnen dann die einmaligen startwerte:


void initVariables(void){
mode = 'P';
direction = 'u';
}

habe dann mit include die oben genannte Headerdatei in die inte´rrupts.c 
eingebunden. Wenn ich jetzt jedoch einen interrupt vom Timer bekomme und 
das Programm in die ISR springt, dann steht in meinen beiden Variablen 
jeweils. '.'  drin. wo kommt das her? kennt das jemand?
Gast #1249914
Lesenswert?
• ▲
▼
Mit dem Code Fragment kann man nichts sagen, aber das klingt danach das 
eine Poninter ins Juhee zeigt und der Speicher da überschrieben wird.

Wann wird die init Funktion aufgerufen? Kann auch ein Timing Problem 
sein.
#1249919
Lesenswert?
• ▲
▼
ist doch klar.
In jedem C-File, in dem du deinen Header einziehst, wird die Variable 
neu erzeugt.

Du musst deine Variable einmal im Programm definieren und einen Wert 
zuweisen.

static uint8 mode = 'P';
static uint8 direction= 'u';


In deinen anderen Dateien kannst du dann mit

extern static uint8;
extern static uint8 direction;


auf deine Variablen zugreifen.

Thomas
#1249922
Lesenswert?
• ▲
▼
Deine sog. 'globalen Variablen' sind in Wirklichkeit keine.
Besorg dir bitte ein C-Buch und mach dich schlau, was mit dem 
Schlüsselwort 'static' ausgedrückt wird.

In deinem Programm existieren 2 Variablen namens "mode".
Eine in der Source Code Datei, in der auch die Funktion initVariables 
enthalten ist. Und eine 2-te in der Source Code Datei in der deine ISR 
enthalten ist.

Und wenn du deine Headerdatei in noch 5 andere C-Dateienb inkludierst, 
bekommt jede einzelne dieser C-Dateien ihren eigenen Satz an 
File-globalen Variablen namens mode bzw. direction.

File-global!  aber nicht  Programm-global!
#1249923
Lesenswert?
• ▲
▼
Thomas Weyhrauch schrieb:
>
> static uint8 mode = 'P';
> static uint8 direction= 'u';
>
>
> In deinen anderen Dateien kannst du dann mit Du musst dann mit
>
> extern static uint8;
> extern static uint8 direction;
>
>
> auf deine Variablen zugreifen.

Das wird nicht gehen.
Das 'static' muss weg!

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