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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.