Het is eenvoudig te vergeten, maar de Arduino gebruikt C ++. Typisch is het C ++ -onderdeel in de bibliotheken, evenals het raamwerk, evenals veel mensen hebben de neiging om hun belangrijkste programma’s te coderen die gebruikmaken van een C-Style, alleen gebruik maken van de bibliotheekobjecten zoals C-taal-extensies. [Fredllll] Onlangs heeft onlangs een ontwerpsjabloonbibliotheek geproduceerd om de Arduino I / O te versnellen en heeft het gedeeld op GitHub.
Als je ooit iets belangrijks hebt gedaan met de Arduino, begrijp je waarschijnlijk dat, terwijl DigitalWrite handig is, het veel werk achter de schermen om ervoor te zorgen dat de PIN-configuratie is en dit voegt overhead toe aan elke oproep. [Fredlllll’s] Design-sjabloonversies kunnen een PIN’s specificeren in twee cycli. Je kunt dat in de helft knippen als je het niet erg vindt om het specificeren van andere pinnen op de exact dezelfde poort te storen.
U kunt een constante gebruiken om een pincode in te schakelen, zoals dit:
schakelaar <1> ();
Als u geen magische nummers wilt gebruiken (en dat is slim), kunt u een constante definiëren:
const uint8_t ledpin = 1;
Switch
Omdat je waarschijnlijk een elegante timing wilt doen, is er eveneens een NOP-ontwerpsjabloon waarmee je een vast aantal cycli kunt uitstellen. Hier is een testcode van RedDIT die een vierkante golf van 1,3 MHz produceert, bijvoorbeeld:
const uint8_t myPin = 5;
void lus () {
CLI (); // uitschakel onderbrekingen uit, omdat ze de timing zouden verpesten
doen {
SwitchonexClusive
nop <5> (); // 5 cycli
switchPortofpin
nop <3> (); // 3 cycli
} Terwijl (1) // terugspringen naar Do is 2 Cycli
}
Vanzelfsprekend is dit niet het maximale, omdat er acht vertragingscycli in de lus zijn.
Je hebt niet nodig om veel te begrijpen over sjablonen om deze bibliotheek te gebruiken, maar als je meer wilt begrijpen, hebben we ze in het verleden bedekt. We hebben eerder opgemerkt dat DigitalWrite ongeveer vijftig keer langzamer is dan een directe haventoegang, evenals de andere I / O-operaties zijn niet veel beter. Het zou fascinerend zijn om uit te checken als sjablonen andere bewerkingen veel efficiënter kunnen maken.