Skabeloner fremskynder Arduino I / O
Det er nemt at glemme, men arduino bruger C ++. Typisk er C ++ -delen i bibliotekerne såvel som rammerne såvel som mange mennesker har blot en tendens til at kode deres hovedprogrammer, der bruger en C-Style, der blot bruger bibliotekets genstande som C-sprogudvidelser. [Fredllll] gav for nylig for nylig et designskabelonbibliotek for at fremskynde Arduino I / O, samt han delte det på GitHub.
Hvis du nogensinde har gjort noget stort med Arduino, forstår du højst sandsynligt, at mens Digitalwrite er praktisk, gør det meget arbejde bag scenerne for at sikre, at PIN-koden er konfiguration, så godt som dette tilføjer overhead til hvert opkald. [Fredlllls] Design Template versioner kan skifte en PIN’s angive i to cykler. Du kan klare det i halvdelen, hvis du ikke har noget imod at forstyrre angivelsen af andre stifter på den nøjagtige samme port.
Du kan bruge en konstant til at tænde en pin, som denne:
Switchon <1> ();
Hvis du ikke kan lide at udnytte magiske numre (og det er smart), kan du definere en konstant:
const uint8_t ledpin = 1;
switchon ();
Fordi du sandsynligvis vil gøre noget elegant timing, er der ligeledes en nopdesignskabelon, der lader dig forsinke et sæt antal cykler. Her er nogle testkode fra Reddit, der producerer en 1,3 MHz Square Wave, for eksempel:
const uint8_t mypin = 5;
void loop () {
cli (); // Deaktiver afbrydelser, da de ville skrue op timingen
gør {
switchonexclusive (); // 1 cyklus
nop <5> (); // 5 cykler
switchoffportofpin (); // 1 cyklus
nop <3> (); // 3 cykler
} mens (1) // hoppe tilbage til at gøre er 2 cykler
}
Det er klart, at dette ikke er det maksimale, enten fordi der er otte forsinkelsescykler i løkken.
Du har ikke krav på at forstå meget om skabeloner til at udnytte dette bibliotek, men hvis du vil forstå mere, har vi dækket dem i fortiden. Vi har bemærket før Digitalwrite er omkring halvtreds gange langsommere end en direkte havn adgang, samt de andre I / O-operationer er ikke meget bedre. Det ville være fascinerende at tjekke, om skabeloner kan gøre andre operationer meget mere effektive.