Șabloanele accelerează ARDUINO I / O

Este ușor să uitați, totuși Arduino utilizează C ++. În mod tipic, partea C ++ este în bibliotecile, precum și în cadrul, precum și mulți oameni tind să codifice programele principale utilizând un stil C doar folosind obiectele de bibliotecă cum ar fi extensiile de limbă C. [Fredllll] a produs recent o bibliotecă de șablon de design pentru a accelera Arduino I / O, precum și el a împărtășit-o pe Github.

Dacă ați făcut vreodată ceva major cu Arduino, cel mai probabil înțelegeți că, în timp ce digitalWrite este la îndemână, face o mare lucrare în spatele scenei pentru a vă asigura că configurația PIN este, precum și acest lucru adaugă deasupra la fiecare apel. [Fredllll’s] Versiunile șablonului de design pot comuta un PIN Specificați în două cicluri. Puteți tăia acest lucru în jumătate dacă nu vă deranjează să deranjați specificarea altor pini în exact același port.

Puteți utiliza o constantă pentru a porni un cod PIN, astfel:

comutator <1> ();
Dacă nu vă place să utilizați numerele magice (și acest lucru este inteligent), puteți defini o constantă:

const uint8_t legat = 1;
comutator ();
Pentru că cel mai probabil doriți să faceți un timp elegant, există, de asemenea, un șablon de design NOP care vă permite să întârziați un număr setat de cicluri. Iată câteva coduri de testare de la Reddit, care produce un val pătrat de 1,3 MHz, de exemplu:

const uint8_t mypin = 5;
Void bucla () {
CLI (); // Dezactivați întreruperea pe măsură ce vor înșuruba calendarul
face {
Switchonexclusive (); // 1 ciclu.
nop <5> (); // 5 cicluri
Switchoffportofpin (); // 1 ciclu.
nop <3> (); // 3 cicluri
} în timp ce (1) // sari înapoi pentru a face 2 cicluri
}
Evident, acest lucru nu este maxim, deoarece există opt cicluri de întârziere în buclă.

Nu aveți nevoie să înțelegeți multe despre șabloanele pentru a utiliza această bibliotecă, totuși dacă doriți să înțelegeți mai mult, le-am acoperit în trecut. Am menționat anterior că digitalwrite este de aproximativ cincizeci de ori mai lentă decât un acces direct la port, precum și celelalte operații I / O nu sunt mult mai bune. Ar fi fascinant să verificați dacă șabloanele ar putea face alte operații mult mai eficiente.

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Post

Laser LighterLaser Lighter

[Rog8811] și-a împărtășit bricheta laser cu noi. El a respins un stil de stil Zippo și a introdus un modul laser cu raze albastre. Vechiul compartiment de combustibil găzduiește bateriile.