Estoy construyendo un dispositivo en la plataforma AVR. El dispositivo necesitará cierta información de tiempo, así que estaba pensando en volver a implementar la funcionalidad similar a Arduino millis
(aunque no exactamente como este ). Sin embargo, después de hacer algunos respaldos de los cálculos del sobre (en parte basados en esta publicación ), me empezó a parecer que millis
consume al menos el 5% del tiempo de CPU en un procesador de 20Mhz, y proporcionalmente más que eso en un 16Mhz uno:
- Cada milisegundo, el temporizador (timer0) se desborda, activa una interrupción, que se incrementa en
millis
- Un ISR debe tomar 26 relojes para la rutina pre / post ISR (5
PUSH
+POP
másCLR
,IN
yRETI
- El propio ISR debería tomar aproximadamente 21 relojes (cargar el valor de 32 bits, incrementarlo y almacenarlo nuevamente en SRAM)
- Esto produce casi 50 relojes, o 50 microsegundos cada milisegundo.
- De hecho, la función ISR de Arduino es más lenta que eso (como lo revela esta publicación ) porque es realmente cuidadoso en mantener los milis lo más precisos posible, lo que requiere más ciclos de CPU
No necesito millis
de precisión, por lo que estoy considerando implementar centis
o incluso decis
para guardar los ciclos del procesador para otras cosas. ¿Es esto irrazonable? ¿Están mal mis cálculos? Parecería una elección de diseño extraña, ¿o me estoy perdiendo algo?