Learning   Examples | Foundations | Hacking | Links

Time Since Start

Un sketch que muestra como mantener un seguimiento del tiempo en el mundo real desde que la placa fue iniciada o reiniciada. El sketch está basado en la función millis(), la cual devuelve el n úmero de milisegundos desde que Freeduino fue reseteada.

Uno de los problemas con la función millis() es que la variable unsigned long se desbordará (overflow) cada 9.3 horas. Si este desbordamiento no es controlado, las cuentas en el sketch saldrán erróneas.

Re: Solución Millis Rollover Respuesta #1 - 06.09.2007 at 01:06:47 Quote Tu puedes acceder a esta poniendo:

extern unsigned long timer0_overflow_count;

al principio de tu sketch. Sin embargo, es probable que haya una mejor manera de lidiar con el desbordamiento. Por ejemplo, si sólo tiene que ser capaz de obtener la duración entre varias llamadas a millis (), debe ser capaz de hacer un millis () - previous_millis (la cual debería funcionar pasado el rollover).

O podrías hacer algo como esto:

current_millis_value = millis(); m += current_millis_value - previous_millis_value; // should work even when millis rolls over seconds += m / 1000; m = m % 1000; minutes += seconds / 60; seconds = seconds % 60; hours += minutes / 60; minutes = minutes % 60; previous_millis_value = current_millis_value;

Share