Sobre la puesta a cero de millis

Soy tan novato que no se si la pregunta debería ir aqui. allá voy

he visto que millis se pone a cero transcurrido unos 50 días, entonces, ¿esto quiere decir que no debo utilizar delay en el programa? mi intención es que el arduino esté funcionando continuamente.

y otra..

las variables que estén en ejecución, ¿cómo podría guardarlas que no sea en EEprom para el caso de perdida total de alimentación?, si, la batería irá incluida al proyecto, pero hasta esta puede quedar KO.

He pensado en un módulo SD, pero me parece que es matar moscas a cañonazos.

Su publicacion se MUEVE a su ubicacion actual ya que es mas adecuada.

El desbordamiento y puesta a cero de millis() no tiene ningún efecto negativo si el código está correctamente realizado.

O sea, mientras en las comparaciones se use el formato

millis() - tiempo_anterior >= intervalo

no hay problemas porque el resultado de la resta (al ser enteros largos sin signo) nunca es negativo que sería lo preocupante.

Justamente se usa millis() para evitar el uso de delay() que "congela" la ejecución del programa.

En cuanto a guardar datos, localmente no tienes más opciones que EEPROM o memoria SD.

Saludos

Y cual es tu planteo? Porque pensar en los posibles problemas que has planteado requiere de tener un objetivo que los ponga a prueba.
Sería mejor hablar de el, antes que proponer problemas que no se si tendrás.

Gracias

De nada.
Te pongo un ejemplo del por qué el reinicio de millis() a los 49.5 (aproximadamente) días no influye en las comparaciones de tiempos (uso hexadecimales para los números grandes porque es más sencillo de escribir).
Supongamos que intervalo contiene 10 (o sea 10 mseg) y que se cumple la igualdad con intervalo cuando millis() contiene 0xFFFFFFF6, entonces guardas este valor en tiempo_anterior.
millis() sigue contando hasta llegar al valor 0xFFFFFFFF, si en ese momento se hiciera la resta el resultado sería 9 y no se cumpliría la igualdad.
Ahora pasa otro milisegundo, millis() devuelve 0.
¿Qué resultado devolverá la resta ahora?
Resulta que como hablamos de enteros largos sin signo, el resultado de 0 - 0xFFFFFFF6 es 10 (en decimal) entonces se cumple la igualdad con intervalo y se almacena 0 en tiempo_anterior para usar en la próxima comparación.
Por eso te dije que en un código bien hecho, el reinicio del contador de millis() no hace diferencia.

Saludos

Pues solo requiero guardar 8 variables que serán programadas periódicamente, y mi necesidad es que no se pierdan caso de perdida de alimentación.

Interesante, entonces, una forma de evitarlo podría ser contar los milisegundos y realizar las operaciones con ese conteo y no con millis?

La única forma de acceder a ese conteo es con millis()

Saludos

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.