É simples esquecer, no entanto, o Arduino utiliza C ++. Normalmente, a parte C ++ está nas bibliotecas, bem como a estrutura, bem como muitas pessoas apenas tendem a codificar seus principais programas que utilizam um estilo C apenas utilizando os objetos da biblioteca como extensões de idiomas C. [Fredllll] apenas produziu recentemente uma biblioteca de modelo de design para acelerar o Arduino E / S, bem como ele compartilhou no GitHub.
Se você já fez algo de major com o Arduino, você provavelmente entende que, enquanto digitalwrite é útil, faz uma grande quantidade de trabalho nos bastidores para garantir que o PIN seja a configuração, bem como isso adiciona sobrecarga a todas as chamadas. [Fredllll’s] Versões de modelo de design pode mudar de um pino especificam em dois ciclos. Você pode cortar isso ao meio, se você não se importa incomodar o especificar de outros pinos na mesma porta.
Você pode utilizar uma constante para ligar um pino, assim:
Switchon <1> ();
Se você não gosta de utilizar números mágicos (e isso é inteligente), você pode definir uma constante:
const uint8_t ledpin = 1;
Switchon
Porque você provavelmente deseja fazer algum tempo elegante, há igualmente um modelo de design nop que permite atrasar um número definido de ciclos. Aqui está algum código de teste do Reddit que produz uma onda quadrada de 1,3 MHz, por exemplo:
const uint8_t mypin = 5;
loop void () {
cli (); // desativar interrupções como eles iriam estragar o tempo
Faz {
switchonexclusive
nop <5> (); // 5 ciclos.
mudaffportpin
nop <3> (); // 3 ciclos
} Enquanto (1) // pule de volta para fazer é 2 ciclos
}
Obviamente, este não é o máximo, porque há oito ciclos de atraso no loop.
Você não precisa entender muito sobre modelos para utilizar esta biblioteca, no entanto, se você quiser entender mais, nós os cobrimos no passado. Observamos antes que a digitalwrite seja cerca de cinquenta vezes mais lentamente do que um acesso direto para portas, assim como as outras operações de E / S não são muito melhores. Seria fascinante verificar se os modelos podem fazer outras operações muito mais eficientes.