Am verzweifeln: Globale Variable ist nicht global

Gast #285555
Lesenswert?
• ▲
▼
Hallo zusammen,

habe in einem Programm mehrere globale Variablen benutzt, wie ich es
auch schon öfter getan habe. Nur in meinem aktuellen Code scheinen die
globalen Variablen nicht global zu sein. Um den Fehler zu beschreiben,
habe ich das Problem auf ein Simples reduziert:

...
unsigned char state = 8;

SIGNAL(SIG_OVERFLOW0)
  {
    state++;
  }

void main (void)
        {
    DDRD = 60;
    PORTD = 255;

    TCCR0=4;
    TIMSK=2;
    sei();

          while (1)
    {
      PORTD=(state*4);
    }
        }


Der Timer erhöht bei jedem Überlauf die globale Variable "state" um
eins. Im Hauptprogramm solle doch nun in jedem Schleifendurchlauf der
aktuelle Zustand auf PORTD ausgegeben werden. Oder sehe ich das
falsch?

Dachte erst mein "while(1)" würde wegoptimiert, aber daran liegt es
nicht.
Schreib ich "PORTD=(state*4)"  mit in die Timer-ISR rein, läuft
alles wie erwartet.

Warum hat meine Variable "state" in der ISR und im Hauptprogramm
verschiedene Werte?

Bin am Verzweifeln. Hab das Problem ja jetzt schon auf ein simples
Programm reproduzieren können, versteh es aber nicht. Wenn ich den
erstellten ASM-Code richtig interpretiere, sieht der Compiler die
Variable "State" in der ISR völlig unabhängig.

Im Anhang nochmal die .c und die Compilerlistings.

Danke schonmal für Eure Hilfe.

Gruß

Thomas
Angehängte Dateien:

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.