Las plantillas aceleran Arduino I / O

August 19, 2022 0 By cpiy

Es fácil olvidar, sin embargo, el Arduino utiliza C ++. Por lo general, la parte C ++ está en las bibliotecas, así como en el marco, así como en el marco, así como muchas personas, solo tienden a codificar sus programas principales que utilizan un estilo C solo que utiliza los objetos de la biblioteca como extensiones de idioma C. [Fredllll] Acabo de producir recientemente una biblioteca de plantillas de diseño para acelerar la E / S de Arduino, así como lo compartió en GitHub.

Si alguna vez ha hecho algo importante con el Arduino, lo más probable es que entienda que, mientras que DIGITALWRITE es útil, hace una gran cantidad de trabajo detrás de las escenas para asegurarse de que el PIN es la configuración, así como esto, agrega la sobrecarga a cada llamada. Las versiones de plantilla de diseño [Fredlllll] pueden cambiar de un PIN específicas en dos ciclos. Puede cortarlo por la mitad si no le importa molestar la especificación de otros pasadores en el mismo puerto exacto.

Puede utilizar una constante para encender un alfiler, como este:

Switchon <1> ();
Si no le gusta utilizar los números mágicos (y eso es inteligente), puede definir una constante:

const uint8_t ledpin = 1;
switchon ();
Debido a que lo más probable es que desee hacer un tiempo elegante, también hay una plantilla de diseño nop que le permite retrasar un número establecido de ciclos. Aquí hay algún código de prueba de Reddit que produce una ola cuadrada de 1.3 MHz, por ejemplo:

const uint8_t mypin = 5;
bucle vacío () {
CLI (); // Desactivar interrupciones ya que arruinarían el tiempo
hacer {
switchonexclusive (); // 1 ciclo
nop <5> (); // 5 ciclos
switchoffporpofpin (); // 1 ciclo
nop <3> (); // 3 ciclos
} Mientras que (1) // saltar de regreso a hacer es 2 ciclos
}
Obviamente, este no es el máximo, ya sea porque hay ocho ciclos de retardo en el bucle.

No se necesita entender mucho sobre las plantillas para utilizar esta biblioteca, sin embargo, si desea entender más, los hemos cubierto en el pasado. Hemos señalado antes de que DigitalWrite es aproximadamente cincuenta veces más lento que un acceso al puerto directo, así como las otras operaciones de E / S no son mucho mejores. Sería fascinante verificar si las plantillas pueden hacer que otras operaciones sean mucho más eficientes.