Testare la velocità di commutazione di un pin digitale
Una delle domande che mi pongo quando lavoro con un dispositivo programmabile è quanto questo sia veloce. Non so se esistano procedure specifiche che indichino la potenza di calcolo effettiva, indicativamente il test che eseguo io è quello di commutare di continuo un’uscita digitale e verificare con un oscilloscopio il tempo della durata di una istruzione.
Il codice è il seguente:
//Netduino GPIO OutputPort Test = new OutputPort(Pins.GPIO_PIN_D0, false); while(true) { Test.Write(true); Test.Write(false); }
Questo codice generare un onda quadra con una frequenza di circa 8.4 KHz; Il segnale positivo generato dalla Write(true) dura circa 53us mentre il segnale negativo dovuto alla funzione Write(false)dura circa 64us. Verosimilmente il segnale negativo dura qualche microsecondo in più poiché il processore deve eseguire anche l’istruzione While(true). Quindi l’istruzione While viene eseguita in circa 11us (64us – 53us)
OutputPort Test = new OutputPort(Pins.GPIO_PIN_D0, false); while(true) { Test.Write(true); //Questa istruzione dura 53us Test.Write(false); //Questa istruzione dura 53us Test.Write(false); //Questa istruzione dura 53us }
La misura con l’oscilloscopio è per l’impulso positivo di circa 53us (istruzione Write(true)) e di circa 117us per l’impulso negativo (53us più 64us, due istruzioni Write(false) e istruzione while(true)).
Queste prove sono state eseguite compilando in modalità Debug, mentre utilizzando la modalità Release i tempi migliorano grazie all’ottimizzazione del codice. Per l’impulso negativo abbiamo circa 53us e per l’impulso positivo abbiamo circa 52us. Quindi le istruzioni write() durano circa 52us mentre l’istruzione while(true) dura circa 1us.
Ogni istruzione impiega un certo tempo per essere eseguita; questo tempo dipende esclusivamente dalla potenza di calcolo del processore Atmel del Netduino. Non abbiamo quindi un controllo diretto sul tempo di esecuzione del programma, sappiamo che ogni istruzione impiega un certo tempo; per migliorare le prestazioni dei nostri programmi dobbiamo imparare a scrivere le istruzioni in modo che impieghino il minor tempo possibile.
In definitiva il Netduino non è velocissimo come un ad esempio un PicMicro; questo dipende sicuramente dal fatto che il microprocessore Atmel deve far girare il .Net micro framework.
Certamente questo piccola perdita di prestazioni è trascurabile rispetto ai vantaggi nell’utilizzare un ambiente gestito dal .Net micro framework, che semplifica la creazione dei programmi e la gestione dell’hardware.
Leggi anche questi articoli:
Related posts
Articoli popolari
Sorry. No data so far.
.Net micro framework Arduino Arduino Webserver Domotica Flyport I2C IOT Netduino OpenPicus raspberry RTC Speed Test