Timer millis() Wertebereich?

Hallo Leute!

Heute eine Frage zum Wertebereich des Timers "millis() "

Ich habe rumgesucht und höchst unterschiedliche Angaben gefunden.

Allgemein wird darauf hingewiesen dass der Timer nach ca. 49 Tagen einen Überlauf hat.
Der Wertebereich wird mit 2 Milliarden angegeben.

Wenn ich mal rechne ergibt sich folgendes:

millis()

1 Sek 1.000
1 Min 60.000
1 Stunde 3.600.000
1 Tag 86.400.000
49 Tage 4.233.600.000

Wenn der Timer nach dem Einschalten oder nach einem Reset des Boards bei 0 startet
müsste der Wertebereich also bei ca. -2.147.483.648 bis 2.147.483.647
(wie an einer Stelle im Internet gefunden) liegen.

Mir ist klar dass ein Überlauf Probleme bereitet. Es geht mir nur darum dass ich in einer Projektbeschreibung keine völligen Quatsch schreibe wenn ich behaupte dass "der Timer von ca. -2 bis +2 Milliarden zählt".

Gruß
Martin

unsigned long

Wenn du immer if(millis() - previousMillis > interval) machst ist auch der Überlauf kein Problem. Da dann dann die Differenz eine sehr hohe Zahl ist. Negative Zahlen gibt es bei unsigned nicht, also kommt was hohes positives raus.

Es momentan nur darum:

Stimmt die Behauptung, dass dass "der Timer von ca. -2 bis +2 Milliarden zählt"?

Trotzdem Danke für Eure Hinweise.

unsigned long kennt keine negativen Werte und zählt von 0 bis ca 4 Milliarden ( 232 -1 )

Und der Überlauf macht überhaupt keine Probleme. Wenn man’s einfach richtig macht
( Serenifly’s Tip) , muss man keine Besonderheit programmieren.
Die Differenz, auch während eines Überlaufs, ist automatisch richtig.

-> Michael_x : Frage klar und deutlich Beantwortet! :slight_smile:

:wink:

Eine Zusammenfassung hier: Millis-Überlauf - von Theorie zu Praxis