Wie sich millis () auf 0 zurücksetzt


14

In der Dokumentation der millis()Funktion heißt es:

Gibt die Anzahl der Millisekunden zurück, seit das Arduino-Board das aktuelle Programm ausgeführt hat. Diese Zahl läuft nach ca. 50 Tagen über (auf Null zurück).

Wie ist das möglich? Erkennt Arduino, wenn ein millis()Überlauf auftritt, und setzt den Wert dann auf 0 zurück? Wenn ja, wie macht es das? Ich möchte nur wissen, was genau unter der Haube mit der Variablen passiert, die von der millis()Funktion zurückgegeben wird.

Antworten:


25

Es ist kein ausschließliches Eigentum von millis(). Jeder Zähler mit einer begrenzten Anzahl von Ziffern wird schließlich auf Null zurückgesetzt. Zum Beispiel wird ein 4-stelliger Zähler danach auf Null zurückgesetzt 9999.

Unter der Haube ist die Variable für millis()vom Typ unsigned long, 32 Bit auf dem Arduino. In diesem Fall sind die 32 Bits (binäre Nullen und Einsen) den Ziffern (0 bis 9) des Zählers ähnlich.

Das Maximum ist 11111111 11111111 11111111 11111111. Sobald Sie dort angekommen sind, millis()kehren Sie beim Hinzufügen zu Null zurück 1. Das Maximum (32 "Einsen") 2^32 - 1entspricht 4294967295dem Dezimalzahlensystem. Der Maximalwert für den Zähler beträgt daher 4.294.967.295 Millisekunden. Umgerechnet in Tage ergeben sich ca. 49,71 Tage.

tally couter


5
Ältere Windows-Versionen haben außerdem eine Millisekundenanzahl in einer 32-Bit-Ganzzahl beibehalten, was dazu führt, dass sich viele Software nach 49 Tagen Betriebszeit nicht mehr richtig verhält.
Russell Borogove

danke JURAJ! Beantwortet einen anhaltenden Zweifel, den ich hatte. AKTUALISIERT;)
Tony Gil

PS: Ich hoffe, Sie stimmen den Änderungen zu. Ich bin der Meinung, dass sie zu Ihrer hervorragenden Antwort beitragen, indem sie ein paar Satzstrukturen klarstellen.
Tony Gil
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.