Forum: Compiler & IDEs if will nicht


von Jörn (Gast)


Lesenswert?

Hi, ich habe untenstehende funktion geschrieben und wollte diese nun mit
dem Simulator von AVR studio simulieren, doch irgendwie überspringt er
einfach die if(bit_is_set(PIND,button1)) if schleifen!! hat jemand ne
idee woran das liegt ???

void get_keys(void)
{
static unsigned char keypress = 0;
unsigned char key;

if (keypress)
{
    if(bit_is_set(PIND,button1))
    {
      if (keytime < 8 && keytime > 0)
      {
      aufgabe = play;
        keypress = 0;
      }
    }
    else
    {
      if (keytime > 8)
      {
      aufgabe = stop;
      keypress = 0;
      }
    }
}
else
{
    if (bit_is_clear(PIND,button1))
    {
    key = 1;
      if (keypress && keytime > 0)
      {
      keypress = key;
      }
      if (key == 0)
      {
      keytime = 0;
      }
    }
}

von OldBug (Gast)


Lesenswert?

Hallo Jörn!

>doch irgendwie überspringt er einfach die if(bit_is_set(PIND,button1))
>if schleifen!

Was heist denn "überspringt"?

Gruß,
Patrick...

von Werner (Gast)


Lesenswert?

Wann wird den die Variable "keypress" auf 1 gesetzt. Wenn Du die am
Anfang der Funktion neu initialisierst wird der erste Teil nie
ausgeführt.

Werner

von Jörn (Gast)


Lesenswert?

Hi,

 mit überspringt meine ich, das er das was in der if schleife steht
nicht ausführt auch wenn z.b keypress auf 1 ist und portd, button1 auf
1 ist

Ich dachte wenn ich schreibe static char keypress schreibe wird die
variable nur einmal initialisiert oder ist das falsch?

MFG Jörn

von OldBug (Gast)


Lesenswert?

Hallo Jörn!

Mach die Variable "keypress" global, dann wird's warscheinlich
Funktionieren.

Gruß,
Patrick...

von Jörg Wunsch (Gast)


Lesenswert?

Nö, eine statische Variable in der Funktion hat die gleiche Wirkung.

Funktioniert's denn nur im Simulator nicht, oder auch in der realen
Welt?

Allerdings erscheint mir die Logik im obersten `else' suspekt: Du
setzt key auf 1 und hast weiter unten ein `if (key == 0)', das
folglich nie erreicht werden kann.

von Jörn (Gast)


Lesenswert?

Hi,

@Jörg Wunsch

Also in der realen Welt läufts auch nicht!!!

Stimmt das macht wirklich keinen sinn, das if(key == 0) muss in die
untere else schleife.

MFG Jörn

von Jörn (Gast)


Lesenswert?

Hi,

erstmal Danke für eure Hilfe!!!!

Mein Prog läuft nun einwandfrei!!! Im Simulator sowie in der Realen
Welt!!

Wo genau das Prob war weiß ich nicht so genau, könnte es denn daran
gelegen haben das ich mitten in einer endlosschleife eine variable
initialisiert habe??

Nun kann ich endlich Tasten per interrupt abfragen!!!

MFG Jörn

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.