¿Cuáles son las alternativas más rápidas para llamar a las funciones Arduino digitalread()
y digitalwrite()
? Se aceptan soluciones específicas de AVR o de chip.
¿Cuáles son las alternativas más rápidas para llamar a las funciones Arduino digitalread()
y digitalwrite()
? Se aceptan soluciones específicas de AVR o de chip.
Acceda a los puertos digitales directamente!
Los 3 métodos que probé fueron
- digitalWrite (pin, LOW); digitalWrite (pin, HIGH);
- CLR (PORTB, 0); SET (PORTB, 0);
- PORTB | = _BV (0); PORTB & = ~ (_BV (0));
[...]
Como puede ver, digitalWrite toma alrededor de 56 ciclos para completarse, mientras que el direccionamiento directo del puerto toma 2 ciclos. ¡Esa es una gran diferencia en el tiempo para los programas que tienen muchas operaciones de IO!
Esta biblioteca es una buena alternativa: enlace
Como se sugirió anteriormente, acceda directamente a los puertos digitales. ¡Pero con estilo!
Al escribir valores codificados directamente en los registros de hardware, pierdes legibilidad y portabilidad.
He publicado en Github una herramienta que llamé HWA que te permite usar una interfaz orientada a objetos para el hardware que no requiere un compilador de C ++ y produce un código binario de alta eficiencia.
HWA está ahí: enlace
La gente en Arduino.SE ya han discutido y probado esto . Como resultado, digitalWriteFast()
no es de mucha mejora con respecto al digitalWrite()
regular. Sin embargo, el acceso directo al puerto es entre 35 y 40 veces más rápido que digitalWrite()
.
Utilice el ChipKit Uno32. Es mucho más rápido que el AVR Arduinos basados en. También se ocupará de sus problemas de tiempo.
Lea otras preguntas en las etiquetas arduino performance