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

Re: system.timer() Kategorie: Programmierung (von nitraM - 5.01.2011 7:54)
Als Antwort auf Re: system.timer() von Detlef - 4.01.2011 11:35
Ich nutze:
C164CI-ControllerBoard, eigenes Board, OSOPT V3.0, OSOPT V3.1
> Hallo NitraM
>
> Danke für die Antwort, genau dieses Wissen hatte ich, als ich den Thread geschrieben hatte.
>
> Problem: Funktioniert nur nicht. Nach einem "gefühlten" Monat, kommt es zu Fehlern bei
> allen Abläufen, die diesen Thread verwenden. Das Testen oder Fehlerprovozieren ist fast unmöglich
> da es ja nur alle 50 Tage passiert!. Und ab dann ist bis zum Reset der Wurm drin.

Warum ist das testen nicht möglich???
Du kannst den Timer mit folgender Routine auf einen beliebigen Wert setzen:

//-------------------------------------
  inline function settimer (long timer)
//-------------------------------------
{
  inline vmcodes.VM_STORE_SYSVAR_LONG | (vmcodes.LSYSVAR_TIMER_MS  << 8);
}


Damit dir hier der Timer-Interrupt nicht dazwischenfunkt, würde ich die Funktion so aufrufen:

 yield;
 timerold=system.timer();
 wait system.timer()<>timerold;
 settimer(wert);


Ã?brigens sollte man, um mit dem Timer eine Wartezeit zu berechnen, auf dieses Konstrukt verzichten:
timer+wartezeit<=system.timer()
Bei einem Ã?berlauf ist der Vergleich durch die negativen Werte
eine Zeit lang ungültig.

Besser ist es, dies so zu berechnen:
system.timer()-timer<=10000

Hier wird die Differenz gebildet. Zu beachten ist aber, da� immer vom "höheren" Wert
der "kleinere" abgezogen wird. (Oder anders ausgedrückt: Vom aktuelleren (Timer-)Wert mu�
immer der alte Wert abgezogen werden.)
Nur so ist die Differenz immer positiv.

Probleme mit einer falschen Berechnung treten daher erst nach ca. 3,5 Wochen auf,
und wiederholen sich dann etwa alle 7 Wochen. (solange dauert es, bis der Timer einmal rum ist.)

nitraM


    Antwort schreiben


Antworten:

Re: system.timer() (von Wurl - 5.01.2011 10:48)
    Re: system.timer() (von Detlef - 5.01.2011 17:08)