PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : While...



Rabenauge
05.04.2010, 20:25
Hallöle.
Ich schon wieder mal.
Ich sitze jetzt eine Stunde hier fest:


lcd_setCursor(0,1);
printf("uebrig:%4d",odoklicks); //wird ausgeführt, Wert ungleich Null!
while(odoklicks != 0);
{

led_set(LED_L_RD,0); // wird bereits nicht ausgeführt
led_set(LED_L_YE,0);
motpwm_setLeft(speed_l);
motpwm_setRight(speed_r);
Regelung();
}

Also: bis zum entsprechenden Kommentar läuft das Programm tadellos, es wird ein Wert "odoklicks" ausgegeben, je nach Programmsituation grösser oder kleiner Null.
odoklicks ist eine ganzzahlige Variable mit Vorzeichen (kann auch negativ sein).
Praktisch kann ich mit dem Programm Zustände erzeugen, wie odoklicks=0, odoklicks<0(negativ), odoklicks>0.
Offenbar hängt das Programm sich auf, wenn odoklicks nicht Null ist, wenn ich als odoklicks Null füttere, dann läuft es problemlos weiter, ohne die while-Schleife zu durchlaufen (ist in diesem Fall ja auch richtig).
Praktisch aber (odoklicks=0 macht keinen Sinn) wird die Variable immer irgendeinen Wert haben.
Dann jedoch läuft es auch _nach_ der Schleife nicht weiter sondern bleibt da stehen.

Aber in keiner der drei Situationen wird diese Schleife auch nur einmal durchlaufen, die LED`s (sie leuchten natürlich vorher) werden nie ausgeschalten.
Beim Compilieren gibt es keinerlei Fehlermeldungen oder auch nur Warnungen.

Was mach ich nuuuun wieder verkehrt?

radbruch
05.04.2010, 21:30
while(odoklicks != 0);

Das Semikolon am Ende der Zeile muss weg sonst wird der {}-Block nicht der While-Schleife zugeordnet.

Gruß

mic

Rabenauge
05.04.2010, 22:24
](*,) Danke.
Kaum zu glauben, ich hab im ganzen Programm bestimmt ein halbes Dutzend solcher Schleifen, ohne Semikolon..