Question:
Puis-je faire en sorte que l'Arduino ignore l'impression série
Kevin Kroon
2015-04-05 16:27:51 UTC
view on stackexchange narkive permalink

J'aime avoir une communication série à des fins de débogage et de test, mais après un certain temps, cela enlève trop de vitesse à l'esquisse.

Est-il possible que l'Arduino ignore serial.print et serial.println tout au long de mon code, sans le transformer en commentaire ni placer chaque impression série à l'intérieur par exemple des déclarations "if (debug == true)" ?

Merci d'avance.

Trois réponses:
fuenfundachtzig
2015-04-05 16:34:27 UTC
view on stackexchange narkive permalink

Si vous insistez sur des performances optimales, le mieux serait d'utiliser une macro pour cela:

  #define Sprintln (a) (Serial.println (a))  

Alors au lieu de

  Serial.println (F ("Hello world!"));  

écrivez

  Sprintln (F ("Bonjour le monde!"));  

etc. Pour désactiver l'impression Serial , définissez la macro vide:

  #define Sprintln (a) 

Cela aura le préprocesseur supprimez tout le code de débogage défini avec Sprintln de votre code.

(Bien sûr, il existe un grand nombre de variantes sur ce thème.)

Vous pouvez également envelopper toutes les impressions existantes dans `#ifdef ENABLE_PRINT` et` # endif`, puis définir ou commenter `#define ENABLE_PRINT` en haut de votre fichier
Vous pouvez même définir un niveau de débogage et définir des macros pour `debugL1 ();`, `debugL2 ();` etc, ainsi vous pouvez choisir le nombre de détails que vous voulez "enregistrer". La macro rendra cependant incapable de changer d'exécution, mais à l'avantage de ne pas avoir de surcharge d'exécution.
Christopher Creutzig
2015-04-05 17:31:48 UTC
view on stackexchange narkive permalink

Vous pouvez, par exemple, utiliser le préprocesseur pour modifier tous les Serial de votre code.

  #ifndef ENABLE_PRINT // désactiver la sortie série # définir Serial SomeOtherwiseUnusedNamestatic class {public: void begin (...) {} void print (...) {} void println (...) {}} Serial; #endif  
Mikael Patel
2015-09-19 18:02:33 UTC
view on stackexchange narkive permalink

Une autre solution consiste à implémenter un périphérique série factice. Ce serait une classe qui, en tant que HardwareSerial, hérite de Stream et implémente les fonctions membres virtuelles nécessaires avec des fonctions factices.

  class NullSerial: public Stream {public: virtual size_t write (uint8_t) {return (1); } int virtuel disponible () {return (0); } virtual int read () {return (0); } virtual int peek () {return (0); } virtual void flush () {} ... void begin (unsigned long, uint8_t) {} void end () {} ...}; NullSerial Serial;  

Car Serial n'est pas défini comme un symbole faible, l'application aurait besoin d'utiliser une variable Steam pour la sortie. Et liez-le au HardwareSerial ou au NullSerial.

  #if defined (DEBUG) Stream& trace = Serial; #elseNullSerial noSerial; Stream& trace = noSerial; # else # endif ... trace.print (42);  

Ce n'est pas complet car toutes les fonctions membres de HardwareSerial (que l'esquisse utilise) sont nécessaires mais donne une idée générale comment utiliser la POO pour résoudre le problème.

Bravo!



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...