Problem mit volatile

Gast #1315402
Lesenswert?

Hallo,

es gibt eine globale volatile int Variable namens kiSpalte. In einer 
Funktion die von der main aufgerufen wird gibt es eine int variable 
namens j die den Wert 0 hat.

kiSpalte=j;

Ich habe in der Funktion beide Variablen überprüft...

if(kiSpalte==0) setPixel(7,7,rot);

und

if(j==0) setPixel(7,7,rot);


In beiden Fällen leuchtet die LED rot.


Dieser kleine "Testbefehl" wird wieder rausgenommen und OCR1A aktiviert.

TIMSK|=(1<<OCIE1A); (Taktfrequenz ca. 2 Hz)


Jetzt wird die Testfunktion im ISR aufgerufen....

if(kiSpalte==0) setPixel(7,7,rot);


Die LED leuchtet nicht.



Kann mir jemand sagen wo der Fehler ist?


Vielen Dank.
Gast #1315451
Lesenswert?

Hmm, der ist n bisschen länger. Hab schon nach logischen Fehlern gesucht 
und es ist denke ich keiner da.


Hab schon alles probiert zu (volatile int) zu casten...


Es handelt sich um eine 8x8 RGB Matrix. Diese wird durch einen ATmega8 
und 4 Schieberegistern angesteuert.


Ein weiteres Schieberegister liest die Tasten des "Gamepads" ein.

4 Gewinnt mit einem KI Gegner ist das Ziel.



Die entsprechenden Zeilen befinden sich unter

ISR(TIMER1_COMPA_vect)  // Fallender Stein
    if(modus==2)  // KI bewegt Stein in die Richtung wo er ihn fallen 
lassen will



und die Funktion

kiTurn



Der Code ist aber recht lang und ich schätze, dass mein erster Beitrag 
ausreicht um den Fehler zu finden... es hat irgendwas mit dem volatile 
Kram zu tun. Hab schon logische Fehler gesucht... alles so wie es sein 
soll, nur dass der Wert nicht übernommen wird.
Angehängte Dateien:
Gast #1315461
Lesenswert?

... kurze Erklärung was die Zeilen bedeuten.

kiSpalte=j;

Hier wird abgespeichert in welcher Spalte der KI den Stein fallen lassen 
soll.


if(modus==2)  // KI bewegt Stein in die Richtung wo er ihn fallen lassen 
will
  {
    if(kiSpalte==0) setPixel(7,7,rot);
    if(position>kiSpalte)
    {
      setPixel(0,position,schwarz);
      position--;
      setPixel(0,position,gelb);
    } else
    if(position<kiSpalte)
    {
      setPixel(0,position,schwarz);
      position++;
      setPixel(0,position,gelb);
    }
  } else
  {
    modus=0;  // KI lässt den Stein fallen
  }


In der obersten Zeile befindet sich ein "gelber Stein" des KI

Er soll diesen Stein in die Richtung bewegen wo er ihn fallen lassen 
soll.
Die Variable position gibt an in welcher Spalte er sich zur Zeit 
befindet.


Wenn ich das Programm starte bewegt sich der Stein aber nicht zur Spalte 
0 sondern in die andere Richtung. Daher die Testfunktionen

if(kiSpalte==0) setPixel(7,7,rot);


kiSpalte hat den Wert 0 nicht übernommen.

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