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

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.