Diferencia entre revisiones de «DEBUG»
De ArduWiki
(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 == | ||
− | < | + | <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 | ||
− | </ | + | </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 17: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.
}