Estoy construyendo un dispositivo en la plataforma AVR. El dispositivo necesitará un poco de información de temporización, así que tengo que pensar reimplementing Arduino millis
de funcionalidad similar (aunque no exactamente como esta). Sin embargo, después de hacer algunas parte posterior de la envolvente de los cálculos (en parte basado en este post), que empezó a aparecer a mí que millis
consume al menos un 5% del tiempo de CPU en un 20 mhz de procesador, y proporcionalmente más de lo que en un 16Mhz uno:
- Cada milésima de segundo, el temporizador (timer0) se desborda, se activa una interrupción, que se incrementa
millis
- Un informe de búsqueda internacional debe tomar el 26 de relojes de pre/post ISR rutina (5
PUSH
+POP
másCLR
,IN
yRETI
- El ISR propio debe tomar alrededor de 21 relojes (de carga valor de 32 bits, lo incrementan, y la tienda de nuevo en SRAM)
- Esto produce casi el 50 relojes, o 50 microsegundos cada milisegundo.
- De hecho, Arduino ISR función es más lento de lo que (según lo revelado por este post), porque es muy cuidadoso acerca de cómo mantener millis tan exactos como sea posible, lo que lleva a más ciclos de CPU todavía
No necesito millis
de precisión, por lo que estoy considerando la implementación de centis
o, incluso, decis
a guardar los ciclos del procesador para otras cosas. Es esto razonable? Son mis cálculos mal? Parece una extraña elección de diseño, o me estoy perdiendo algo?