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 | ||
| ||
> 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) |