Está definida en ..\hardware\arduino\avr\cores\arduino\wiring.c
unsigned long millis()
{
unsigned long m;
uint8_t oldSREG = SREG;
// disable interrupts while we read timer0_millis or we might get an
// inconsistent value (e.g. in the middle of a write to timer0_millis)
cli();
m = timer0_millis;
SREG = oldSREG;
return m;
}La función millis utiliza el Timer0 y una interrupción por desbordamiento de ese timer.
El timer se configura para un periodo de 1 Khz. Por ello, cuando desborda, se genera una interrupción y dentro de esa interrupción es donde se actualiza el timer0_millis.
En un pic se puede hacer usando el timer1 y el periodo. Lo ajustas para obtener un periodo de 1 Khz y cuando se produzca la interrupción incrementas en 1 una variable global de 32 bits que será el tiempo en ms transcurridos desde que diste alimentación al pic.
Saludos.
Pero este timer0_millis desde donde se escribe?. De donde viene esto?En el mismo archivo tenes la interrupcion:
Pero este timer0_millis desde donde se escribe?. De donde viene esto?En el mismo archivo tenes la interrupcion:
Secrets of Arduino millis:
https://www.best-microcontroller-projects.com/arduino-millis.html