Qu'est ce qui se passe après un overflow de millis() ?

Bonjour,

Quelqu’un pourrait m’éclairer sur cette question svp ?

Est-ce qu’après un overflow, millis() répare à 0 ou ?

Une autre question : est-ce que la mise en veille de l’Arduino, stoppe l’évolution de millis() ?

Merci

Salut,

Oui il repars à zéro, comme toute variable non signée.

Pour la mise en veille tout dépend le niveau de la mise en sommeil : du moment que le timer qui incrémente millis() est actif, millis() est mis à jour.

B@tto:
Salut,

Oui il repars à zéro, comme toute variable non signée.

Pour la mise en veille tout dépend le niveau de la mise en sommeil : du moment que le timer qui incrémente millis() est actif, millis() est mis à jour.

Salut,

Merci pour cet info sur millis() parce que je comptais réinitialiser tous les 50 jours ma carte, mais si ça se fait tout seul c'est encore mieux.
Pour la mise en veille, est-ce qu'il faut forcément une interruption pour réveiller le uC ou n'importe quel entrée digital peu le réveiller ? Je me doute que tout dépend de la façon dont la mise en veille est faite mais je n'ai pas beaucoup de pins interruptions à ma disposition.
Merci

Millis c'est le timer 0 donc so tu endors ta carte suffit de pas couper le timer (pas de power off ni d'inhibition de toutes les sources d'interruption)

Pour le réveil tu peux chosir une interruption externe ou régler un timer pour que l'overflow genere une intereuption interne et reveil le micro

Toutes ces configs sont présentes dans la datasheet du micro

Par contre millis ne réinitialise pas le soft ! Il repartira juste à zéro c'est tout
Donc la reinit ne se fait pas tout seul.

Réinitialiser le micro n'a en soit (dépend de ton application) aucun intérêt
Le seul intérêt de faire un reset c'est le blocage du code dans des zones bizarres et dans une boucle corrompu

Pour cela tu as le watchdog
C'est un timer qui reset le micro si tu le remets pas régulièrement a zéro

Je pense que ce n'est pas aussi trivial.
millis() utilise un timer qui doit tourner en permanence. Mais millis() utilise aussi une ISR qui claque à chaque débordement dudit timer (une petite plongée dans wiring.c vous en convaincra). Donc l'arduino va être réveillé périodiquement et il faudra le remettre en sommeil.

La sortie de veille ne fait pas repartir de zéro. L'exécution continue après l'instruction qui avait lancée la mise en veille.

derder9161:
Par contre millis ne réinitialise pas le soft ! Il repartira juste à zéro c'est tout
Donc la reinit ne se fait pas tout seul.

Je me doute bien qu'il n'y a pas de lien direct entre le soft et millis(), mais après un overflow millis repart à 0 et continue de s'incrémenter normalement ou pas ?
Merci

Oui oui

Bonjour,

Je vous remercie pour ces infos.

Pour plus de précaution je m'assurerai de rebooter mon uC tous les 45 jours.

Encore merci

pepe:
En effet, ce ne sont pas réellement les millisecondes qui sont physiquement comptées, mais le nombre de fois que le timer 0 du microcontrôleur fait un tour de compteur, ce qui arrive toutes les 1,024 ms sur un Arduino à 16MHz, et toutes les 2,048 ms sur un Arduino à 8MHz. Le nombre de millisecondes effectivement écoulées est déterminé par calcul à partir de cette information.

Il en résulte que, pour compenser l'accumulation régulière des retards de 24µs (pour 16MHz) ou 48µs (pour 8MHz), certains nombres n'apparaissent pas dans le comptage retourné par millis().

Merci pour l’explication, je ne savais pas.
Mais lors de la réinitialisation du timer, n’y a-t-il pas un petit temps mort qui devrait être compté avec (durant l’interruption)?

Une IT c'est un tick horloge donc trés rapide, la routine qui s'en suit doit faire quelques us, soit une erreur infime.