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

Re: Timer Kategorie: Programmierung (von Martin Binder - 25.02.2004 17:24)
Als Antwort auf Timer von ChristianS. - 23.02.2004 20:37
Ich nutze:
C-Control II Unit, CC2-Application-Board, eigenes Board, OSOPT_V2
Hallo Christian,

ich löse dein Problem folgenderma�en:
~~~~~~~~~~~~~~~
// Routine ktime.c2
//-----------------------------------------------------
  function diffm(long oldtim, int minutes) returns byte
//-----------------------------------------------------
// Routine zur Abfrage ob bestimmte Zeit in Minuten schon vergangen ist
// result = 0 -> NEIN,  result = 1 -> JA
  {
  long newdif, deltim;
  deltim = minutes;             // gewünschte Zeitdifferenz in m
  deltim = deltim * 60000;    // gewünschte Zeitdifferenz in ms
  newdif = system.timer() - oldtim;  // aktuelle Zeitdifferenz in ms
  if deltim > newdif
    return 0;                        // noch nicht vergangen
  return 1;
  }
~~~~~~~~~~~~~~~
...und der Aufruf dieser Routine läuft so ab:
~~~~~~~~~~~~~~~
// Thread Main
{
  int i;
  long timerone;
...
  system.TIME time;
  system.gettime(time);
...
  timerone = system.timer();      // timer starten
...
  i = ktime.diffm(timerone, 10);   // schon 10 Minuten seit Start ?
    if i == 0
      {
      (irgendeine Aktion);            // Zeit abgelaufen
      return;
      }
...
}
~~~~~~~~~~~~~~~
Den Timer kannst du jederzeit neu starten, auch zwischendurch,
natürlich gehts auch mit längeren oder kürzeren Intervallen als zB. Minuten.
Ich hab mir Routinen für Sekunden, Minuten, Stunden und Tage geschrieben.

Aber pass auf:
Wenn du den Timer nicht zurücksetzt, wird er alle 48 Tage von selbst "aktiv",
denn nach dieser Zeitspanne hat "system.timer()" einen internen Zähler - �berlauf...

GruÃ? Martin


> Hallo,
> ich versuche einen Timer zu programmieren, der eine bestimmte Anzahl von Sekunden warten soll.
> Ich habe eine Funktion geschrieben, die dieses macht , nur sind dann
> während der Wartezeit keine anderen Aktionen (z.B. Abfragen von Ports) möglich.
>
> function ZEIT(byte sekunden) returns byte
> /*******************************************************/
> /** Wartezeit in Sekunden, maximal 3600s (60min)       */
> /*******************************************************/
> {
>   byte akt_sec, akt_min, sec, min;
>   sec= sekunden%60; // Anteil Sekunden
>   min= sekunden/60; //Anteil Minuten
>   akt_min=system.minute(); //aktuelle Minute
>   akt_sec=system.second(); //aktuelle Sekunde
>   while min > (system.minute() - akt_min);
>    while sec > (system.second() - akt_sec);
>   return -1;
> }
>
> Deshalb habe ich ins Forum geschaut, und bin auf einen "Muster-Thread" gestoÃ?en, den ich dann
> etwas geändert habe.
>
> const sekunden=5;
> byte flag, timerflag, tim, sekunde;
>
> thread zeit2
>
> {
>  timerflag=0xFF;
>  tim=0;
>  sekunde=system.second();
>  while tim >  {
>   wait sekunde!=system.second();
>   sekunde=system.second();
>   tim=tim+1;
>  }
>  timerflag=0;
>  reset;
> }
>
>
>
> ...aber irgendwie läuft der Timer nur ein mal. Wie kann ich diesen öfter starten?
>
>
>
> mein Test-Hauptprogamm sieht so aus...
> thread main
> {
>  stports.init();
>  lcdext.init();
>  lcdext.clear();
>  run waithost;
>  run zeit2;
>
> loop
> {
>
> lcdext.home();
> lcdext.zahl3(timerflag);
>  if timerflag==0
>  {
>  lcdext.clear();
>  lcdext.print("...ende");
>  }
>  }
> }
>
>
> Wenn mir einer unter die Arme greifen könnte, wäre ich dankbar, da ich Anfänger bin und mich
> noch ziemlich schwer mit der Programmiererei tue!
>
> Vielen Dank,
> ChristianS.
>
>
>


    Antwort schreiben


Antworten:

Re: Timer (von ChristianS. - 26.02.2004 22:35)
    Re: Timer (von Hansi - 21.04.2004 14:28)