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 marcell - 15.03.2004 20:10)
Als Antwort auf Timer und kein Ende! von ChristianS. - 15.03.2004 14:16
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, eigenes Board, 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
 


    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)