Re: Timer und kein Ende! Kategorie: Programmierung (von marcell - 15.03.2004 20:10) | ||
Als Antwort auf Timer und kein Ende! 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). > hallo .. habe mich mal an deinem programm versucht, verusche es zu laden... wenn alles ok dann... :-) ansonsten versuch es mit kleinen anpassungen an dein programm >> gro�er fehler = reset ohne halt am ende vom thread << hier das geänderte Prog. >>>>>>>>>>>>>>>>>>>>>> const schalter = 10; // Eingang P2, PIN48 const wartezeit = 5; // in Sekunden int nachlauf_busy int timerflag; thread nachlauf { nachlauf_busy = -1; hwcom.print(" L->H Flanke " + 13 +10); // wenn alles ok ,entfernen... wait not ports.get(schalter); // warte auf low-flanke hwcom.print(" H->L Flanke " + 13 +10); // wenn alles ok ,entfernen... hwcom.print("...starte Timer" + 13 +10); // wenn alles ok ,entfernen... sleep ( wartezeit * 1000); nachlauf_busy = 0; timerflag = -1; // timerflag sperren... halt; // reset ohne halt = ERROR... // halt am ende benötigt kein reset... } // end thread nachlauf thread main { // hardware initialisieren... hwcom.init(); stports.init(); // ??? lcdext.init(); lcdext.clear(); stports.LCDlight(0); //??? //run waithost; //??? hwcom.print("starte Programm...." + 13 + 10); timerflag = 0; loop { // warte auf high-flanke... if ports.get(schalter) and not nachlauf_busy // H-Flanke während run-thread sperren { // hier befehle zu relais einschalten... run nachlauf; // Thread starten } // warte auf timerflag... if timerflag // Thread völlig abgearbeitet...und halt !! { hwcom.print("Timer abgelaufen" + 13 +10); // hier weitere programm-befehle... timerflag = 0; // timerflag freigeben... } } // end loop main } // end thread main | ||
Antwort schreiben Antworten: 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) |