Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Timer und kein Ende! Kategorie: Programmierung (von ChristianS - 15.03.2004 21:30)
Als Antwort auf Re: Timer und kein Ende! von marcell - 15.03.2004 20:10
Ich nutze:
C-Control II Station, OSOPT V3.0
> > 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 ,später soll ein Relais bei
> > 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
>  

Hallo,
erstmal vielen Dank für Deine Antwort, aber das mit dem ERROR bei Reset verstehe ich nicht,
ich bin der Meinung, dass mit dem Befehl "reset" der "halt"-Befehl überflüssig wird, oder?


    Antwort schreiben


Antworten:

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)