Diferencia entre revisiones de «DEBUG»

De ArduWiki
Saltar a: navegación, buscar
(Página creada con «Durante el desarrollo, todos usamos Serial.print() para ayudar a depurar nuestro código. Cuando las cosas parecen estables, volvemos y eliminamos el código de depurac...»)
 
(Vea también)
 
(No se muestran 2 ediciones intermedias del mismo usuario)
Línea 23: Línea 23:
  
 
== Ejemplos ==
 
== Ejemplos ==
<pre>
+
<syntaxhighlight lang="c++">
 
#define DEBUG
 
#define DEBUG
 
#ifdef DEBUG
 
#ifdef DEBUG
Línea 34: Línea 34:
 
  #define DEBUG_PRINTLN(x)  
 
  #define DEBUG_PRINTLN(x)  
 
#endif
 
#endif
</pre>
+
</syntaxhighlight>
 +
 
 +
== Ejemplo 1 ==
 +
Imprimir una matriz
 +
 
 +
<syntaxhighlight lang="c++">
 +
#define DEBUG_ARRAY(a) {
 +
  for (int index=0; index<sizeof(a)/sizeof(a[0]); index++){
 +
      Serial.print(a[index]);
 +
      Serial.print('\t');
 +
  }
 +
  Serial.println();
 +
};
 +
String str = "";
 +
const chr separador = ',';
 +
const byte largo = 3;
 +
int datos[largo];
 +
 
 +
void setup(){
 +
  Serial.begin(115200);
 +
}
 +
 
 +
void loop(){
 +
  if (Serial.available()){
 +
      str = Serial.readStringUntil('\n');
 +
      for (byte i=0; i<largo ; i++){
 +
        int indice = str.indexOf(separador);
 +
        datos[i] = str.substring(0, indice).toInt();
 +
        str = str.substring(indice + 1);
 +
      }
 +
      DEBUG_ARRAY(data);
 +
  }
 +
}
 +
</syntaxhighlight>
 +
 
 +
== Ejemplo 2 ==
 +
<syntaxhighlight lang="c++">
 +
#define DEBUG(a) Serial.println(a);
 +
String texto = "-123.45";
 +
 +
void setup(){
 +
  Serial.begin(9600);
 +
  float valor = texto.toFloat();
 +
  DEBUG(valor);
 +
}
 +
 +
void loop(){
 +
  //Nada.
 +
}
 +
</syntaxhighlight>
  
 
== Vea también ==
 
== Vea también ==
 +
* [[flash]]
 +
* [[SRAM]]
 +
* [[EEPROM]]
  
 
== Referencias ==
 
== Referencias ==

Revisión actual del 13:20 25 jul 2018

Durante el desarrollo, todos usamos Serial.print() para ayudar a depurar nuestro código. Cuando las cosas parecen estables, volvemos y eliminamos el código de depuración... solo para descubrir unos días después que necesitamos nuevamente el código de depuración. Una buena solucion es dejar todo el código de depuración donde corresponde y solo modificar esta linea:

Sintaxis

#define DEBUG
#ifdef DEBUG 
   Serial.print("Algunas cosas de depuración"); 
   //Más código de depuración ... 
#endif

Para desactivas solo comente la primera linea:

//#define DEBUG
#ifdef DEBUG 
   Serial.print("Algunas cosas de depuración"); 
   //Más código de depuración ... 
#endif

Comentarios

Cuando comentar la primera linea logras que uC defina que DEBUG desaparezca comentándolo. Como ya no está definido en el programa, cualquier elemento entre el #ifdef y el #endif ya no forma parte del archivo fuente desde el punto de vista del compilador. Esto facilita agregar y eliminar código de depuración.

Ejemplos

#define DEBUG
#ifdef DEBUG
 #define DEBUG_PRINT(x)     Serial.print(x)
 #define DEBUG_PRINTDEC(x)  Serial.print(x, DEC)
 #define DEBUG_PRINTLN(x)   Serial.println(x)
#else
 #define DEBUG_PRINT(x)
 #define DEBUG_PRINTDEC(x)
 #define DEBUG_PRINTLN(x) 
#endif

Ejemplo 1

Imprimir una matriz

#define DEBUG_ARRAY(a) {
   for (int index=0; index<sizeof(a)/sizeof(a[0]); index++){
      Serial.print(a[index]); 
      Serial.print('\t');
   } 
   Serial.println();
};
String str = "";
const chr separador = ',';
const byte largo = 3;
int datos[largo];

void setup(){
   Serial.begin(115200);
}

void loop(){
   if (Serial.available()){
      str = Serial.readStringUntil('\n');
      for (byte i=0; i<largo ; i++){
         int indice = str.indexOf(separador);
         datos[i] = str.substring(0, indice).toInt();
         str = str.substring(indice + 1);
      }
      DEBUG_ARRAY(data);
   }
}

Ejemplo 2

#define DEBUG(a) Serial.println(a);
String texto = "-123.45";
 
void setup(){
   Serial.begin(9600);
   float valor = texto.toFloat();
   DEBUG(valor);
}
 
void loop(){
   //Nada.
}

Vea también

Referencias