Benchmark Serial Arduino
De Wiki_du_Réseau_des_Electroniciens_du_CNRS
Aller à la navigationAller à la recherche
/* Objectif Montrer l'effet de l'usage abusif de Serial sur les performances. Le programme exécute une opération idiote d'incrémentation d'une variable et son affichage. Nous mesurons le temps d'exécution avec l'usage de Serial.print et sans. Les temps et le rapport entre les deux sont affichés à la fin. Auteur: MarcDexet (at) gmail.com 23 janvier 2015 Licence CC By SA 3 https://creativecommons.org/licenses/by-sa/3.0/legalcode */ #define NB_OF_ITERATIONS 1000 byte runOnce = 0; // Flag pour fonctionner 1 fois void setup() { Serial.begin(9600); } void loop() { if ( ! runOnce ) { runOnce = 1; //--------------------- // Avec sortie SERIE //--------------------- volatile int k=0; unsigned long startTs = micros(); for(int i =0; i < NB_OF_ITERATIONS; i++) { k++; Serial.print(k); } unsigned long testWithSerial = micros() - startTs; //--------------------- // Sans sortie SERIE //--------------------- k=0; startTs = micros(); for(int i =0; i < NB_OF_ITERATIONS; i++) { k++; } unsigned long testWithoutSerial = micros() - startTs; //- affichage final Serial.print("\n\n AVEC "); Serial.print(NB_OF_ITERATIONS); Serial.print("\nAVEC SORTIE PAR PORT SERIE (microsecond) "); Serial.println(testWithSerial); Serial.print("SANS PORT SERIE (microsecond) "); Serial.println(testWithoutSerial); Serial.println("RAPPORT :"); Serial.println( ((float) testWithSerial)/((float) testWithoutSerial)); } }
Voici les résultats sur un CoreI5 8Go de mémoire
AVEC 1000 AVEC SORTIE PAR PORT SERIE (microsecond) 2938100 SANS PORT SERIE (microsecond) 1076 RAPPORT : 2730.58
L'opération est 2730 fois plus lente avec Serial.print que sans