Comment millis () se réinitialise à 0


14

En regardant la documentation de la millis()fonction, il dit:

Renvoie le nombre de millisecondes depuis que la carte Arduino a commencé à exécuter le programme actuel. Ce nombre va déborder (revenir à zéro), après environ 50 jours.

Comment est-ce possible? Arduino détecte-t-il le millis()débordement, puis réinitialise-t-il la valeur à 0? Si oui, comment fait-il? Je veux juste savoir ce qui se passe exactement sous le capot avec la variable renvoyée par la millis()fonction.

Réponses:


25

Ce n'est pas une propriété exclusive de millis(). Tout compteur avec un nombre limité de chiffres revient finalement à zéro. Par exemple, un compteur de pointage à 4 chiffres revient à zéro après 9999.

Sous le capot, la variable pour millis()est de type unsigned long, qui est de 32 bits sur l'Arduino. Dans ce cas, les 32 bits (0 et 1 binaires) sont similaires aux chiffres (0 à 9) sur le compteur de comptage.

Le maximum est 11111111 11111111 11111111 11111111. Une fois là, millis()revient à zéro lorsque vous ajoutez 1. Le maximum (32 "uns") est 2^32 - 1égal à 4294967295dans le système de nombres décimaux. La valeur maximale pour le compteur est donc de 4 294 967 295 millisecondes. Converti en jours, vous obtenez environ 49,71 jours.

tally couter


5
Les anciennes versions de Windows conservaient également un décompte de millisecondes dans un entier 32 bits, provoquant un mauvais comportement de nombreux logiciels après 49 jours de disponibilité.
— Russell Borogove

merci JURAJ! Répond à un doute persistant que j'avais. MIS À JOUR;)
— tony gil

PS: j'espère que vous approuvez les modifications, je pense qu'elles ajoutent à votre excellente réponse en clarifiant quelques structures de phrases.
— tony gil
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.