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 - 4.01.2011 10:27)
Als Antwort auf Re: system.timer() von Wurl - 2.01.2011 21:32
Ich nutze:
C164CI-ControllerBoard, eigenes Board, OSOPT V3.0, OSOPT V3.1
> Hallo.
>
> Das mit dem system.timer() als 32bit long Variable gefällt mir auch nicht so.
> 32bit entsprechen rund 4Mrd. Millisekunden, also ca. 71500 Minuten oder 1193 Stunden oder 49,7 Tage.
> Für eine absolute Zeit ist das zu wenig.
> Sofern system.timer() bei Null startet (wobei ich mir nicht sicher bin) gibt es dann nach knapp 50 Tagen einen Overflow.
> Zeitvergleiche mit system.timer() werden also kompliziert, weil man den Overflow berücksichtigen muss.
> Und wenn - wie ich glaube - Werte grö�er 2^31 als Negativ (2er-Komplement) interpretiert werden, dann wird es noch schwieriger.

Ich poste mal den Beitrag von Andre....

Nicht nur der Timer läuft über, sondern jede Variable.
somit wird aus 2147483647+1 immer -2147483648 , egal, ob timer oder normale Long-Variable.
Timervergleiche werden in der Programmierung eigentlich schon immer auf diese Weise gemacht,
da diese immer funzen.
Vieleicht lässt sich das am einfachsten mit der Hex-Schreibweise verdeutlichen:
0x00000000 bis 0x7FFFFFFF sind die Werte von 0 bis 2147483647
0x80000000 bis 0xFFFFFFFF sind die Werte von -2147483648 bis -1
Addierst Du nun bei 0x7FFFFFFF eins dazu, erhäst Du 0x80000000, also -2147483648.
Addierst Du bei 0xFFFFFFFF (=-1) ein dazu erhälst Du 0.
Der eigentliche Ã?berlauf findet also von -1 zu 0 statt.
Bei der Subtraktion verhält sich das ganze genauso.

Wenn Du jetzt system.timer()-timer rechnest, und timer den Wert 2147483000 hat
und der System-timer bei -214748250 steht, wird also
-2147482500 - 2147483000 gerechnet.
Hier kommt es bei der Berechnung zu einem "Ã?berlauf":
0x8000047C - 0x7FFFFD78
Wie Du siehst aber nicht wirklich. :-)
Das Ergebis wäre hier 1796 (0x704).
Ineressant wäre eher der Timerbereich von z.B. -100 zu +50.
system.timer() - timer:
0x00000032 - 0xFFFFFF9C
Hier findet ein echter Ã?berlauf bei der Berechnung statt.
Das Ergebis ist aber dennoch +150



Alsoalles im grünen Bereich...
nitraM


    Antwort schreiben


Antworten:

Re: system.timer() (von Detlef - 4.01.2011 11:35)
    Re: system.timer() (von nitraM - 5.01.2011 7:54)
        Re: system.timer() (von Wurl - 5.01.2011 10:48)
            Re: system.timer() (von Detlef - 5.01.2011 17:08)
    Re: system.timer() (von Wurl - 4.01.2011 21:41)