Modelli Accelerare Arduino I / O

January 4, 2023 0 By eghx

È semplice da dimenticare, tuttavia l’Arduino utilizza C ++. In genere, la parte C ++ è nelle biblioteche e nella struttura e alla struttura e a molte persone tendono a codificare i loro programmi principali utilizzando uno stile C utilizzando solo gli oggetti della biblioteca come le estensioni del linguaggio c. [Freddllll] ha appena prodotto una libreria di modelli di progettazione per accelerare l’I / O Arduino e lo ha condiviso su GitHub.

Se hai mai fatto qualcosa di importante con l’Arduino, molto probabilmente capisci che mentre DigitalWrite è utile, fa un grande lavoro dietro le quinte per assicurarti che il PIN sia configurazione così come questo aggiunge in alto a ogni chiamata. Le versioni del modello di progettazione [Freddllll] possono cambiare uno specificare un PIN in due cicli. Puoi tagliare questo a metà se non ti dispiace disturbare lo specificare altri perni sulla stessa porta.

Puoi utilizzare una costante per accendere un PIN, in questo modo:

switchson <1> ();
Se non ti piace utilizzare numeri magici (ed è intelligente) puoi definire una costante:

Cost UINT8_T LEDPIN = 1;
switchson ();
Perché molto probabilmente volete fare un po ‘di tempismo elegante, c’è anche un modello di progettazione NOP che consente di ritardare un determinato numero di cicli. Ecco alcuni codice di prova da Reddit che produce un’onda quadrata da 1,3 MHz, ad esempio:

Cost UINT8_T mypin = 5;
void loop () {
cli (); // disabilita gli interrupt mentre avrebbero rovinato i tempi
fare {
switchonexclusive (); // 1 ciclo
NOP <5> (); // 5 cicli
switchporpofpin (); // 1 ciclo
NOP <3> (); // 3 cicli
} while (1) // Salta per fare è 2 cicli
}
Ovviamente, questo non è il massimo, perché ci sono otto cicli di ritardo nel ciclo.

Non hai bisogno di capire molto sui modelli per utilizzare questa libreria, tuttavia se vuoi capire di più, li abbiamo coperti in passato. Abbiamo notato prima che DigitalWrite sia di circa cinquanta volte più lento di un accesso diretto a porta, nonché le altre operazioni I / O non sono molto migliori. Sarebbe affascinante il check-out se i modelli potrebbero rendere altre operazioni molto più efficienti.