Timer und kein Ende! Kategorie: Programmierung (von ChristianS. - 15.03.2004 14:16) | ||
| ||
Hallo, irgenwie verstehe ich mein Programm nicht. Offensichtlich mache ich etwas falsch, aber was? Ich glaube es liegt ein grundsätzlicher Denkfehler vor. Das Programm soll bei Betätigung eines Schalters, H-L-Flanke, einen Timer ansto�en, der eine bestimmte Zeit an Sekunden wartet, bevor er eine Meldung ausgiebt. (Derzeit steigenden Flanke eingeschaltet werden, und bei fallender Flanke zeitverzögert ausgeschlatet werden). Soweit funktioniert das Prog auch so wie es soll, aber wenn ich die Zeilen hwcom.print("...starte Timer"); hwcom.ret(); im Thread "nachlauf" auskommentiere, dann läuft der Timer nur genau ein mal ab! Dann tut sich nix mehr! Erst habe ich geglaubt es liege an der Geschwindigkeit und habe stattdessen einen sleep von 50, dann 100, 200 und schlie�lich 1000ms eingefügt, aber das hilft auch nicht. Hat irgendjemand eine Idee? Oder ist der ganze Ansatz irgendwie nix. Ich habe so die Vermutung, es liegt an der Flankengeschichte, ev. funktioniert das nicht ganz richtig! ...aber event. sehe ich auch den Wald vor lauter Bäumen nicht.... Ich wäre dankbar für eine Antwort (oder einen neuen Ansatz). hier das Prog. const schalter=10; // Eingang P2, PIN48 const wartezeit=5; // in Sekunden int flanke; int timerflag; thread nachlauf { long timer; hwcom.print("...starte Timer"); // mit diesen Einträgen funzt das Programm hwcom.ret(); // ohne läuft der Timer nur ein Mal timerflag=0; timer=system.timer(); wait system.timer()- timer>(wartezeit*1000); timerflag=0xFF; reset; } function SCHALTER () returns int /*******************************************************/ /** Auswertung des SCHALTER-Kontaktes */ /*******************************************************/ { if ports.get(schalter)xor flanke //reagiert auf steigende und fallende Flanke { flanke=ports.get(schalter); //Pegel am Port speichern return 0xff; //flanke=0, d.h. L->H; flanke=-1, d.h. H->L } return 0; } thread main { stports.init(); lcdext.init(); lcdext.clear(); stports.LCDlight(0); run waithost; // ACHTUNG: die Routine habe ich mal ´rausgeschmissen, ist aber die von A.H. sleep 5000; hwcom.clr(); hwcom.print("starte Programm...."); hwcom.ret(); loop { if SCHALTER() { if flanke { hwcom.print(" L->H Flanke"); hwcom.ret(); } else { hwcom.print(" H->L Flanke"); hwcom.ret(); run nachlauf; } } if timerflag { hwcom.print("Timer abgelaufen"); hwcom.ret(); timerflag=0; } } } | ||
Antwort schreiben Antworten: Re: Timer und kein Ende! (von marcell - 15.03.2004 20:10) Re: Timer und kein Ende! (von ChristianS - 15.03.2004 21:30) Re: Timer und kein Ende! (von André H. - 21.03.2004 11:06) Re: Timer und kein Ende! (von marcell - 16.03.2004 22:40) Re: Timer und kein Ende! (von ChristianS - 17.03.2004 20:33) |