Das debuggen von Programmen (Sketches) auf dem Arduino ist schwieriger als beispielsweise in Hochsprachen wie C# oder Java. Dennoch kann man sich beim debugging in der Arduino-IDE das Leben etwas leichter machen. Die Idee für diese Dokumentation kam mir durch einen Beitrag der Seite "Der Hobbyelektroniker", wovon ein Teil des Codes stammt.
Die folgende kleine Library besitzt/vermisst folgende Features:
- Ausgabe von Werten über die serielle Schnittstelle
- Breakpoints sind nicht möglich
- Optionale Delays notwendig
- Benötigt zusätzlichen Speicherplatz auf dem Mikrocontroller
Der folgende Code ist eine Sammlung einiger Makros zum Debugging, welcher in den eigentlichen Sketch eingebaut werden muss.
/**
* SimpleDebug.h - Library for basic debugging features
* (c) 2018 Christian Grieger
* GNU GENERAL PUBLIC LICENSE
*/
#ifndef SIMPLEDEBUG_H
#define SIMPLEDEBUG_H
#ifdef _SIMPLEDEBUG
void debugWait(void)
{
// empty serial buffer
char ch;
while (Serial.available()) {
ch = Serial.read();
}
ch = 0;
Serial.println(F("DEBUG: Press 'c' to continue."));
// wait for keypress "c"
do {
if (Serial.available() > 0) {
ch = Serial.read();
}
} while (ch != 'c');
// empty serial buffer
while (Serial.available()) {
ch = Serial.read();
}
}
#define DEBUG_INIT(speed) Serial.begin(speed)
#define DEBUG_PRINT(val) Serial.print("DEBUG: " + String(val))
#define DEBUG_PRINTLN(val) Serial.println("DEBUG: " + String(val))
#define DEBUG_DELAY(ms) delay(ms)
#define DEBUG_WAIT(condition) if (condition) debugWait()
#else
// Empty macros bodies if debugging is not needed
#define DEBUG_INIT(speed)
#define DEBUG_PRINT(val)
#define DEBUG_PRINTLN(val)
#define DEBUG_DELAY(ms)
#define DEBUG_WAIT(condition)
#endif
#endif
Der folgende Sketch benutzt diese Library zur Debug-Ausgabe:
// comment the following line for toggling the debug outputs:
#define _SIMPLEDEBUG
#include "SimpleDebug.h"
void setup()
{
DEBUG_INIT(9600);
DEBUG_WAIT(true);
}
void loop()
{
DEBUG_PRINTLN(millis());
delay(2000);
}
Der Verbauch von Speicher auf dem Mikrocontroller zum Vergleich mit an- und ausgeschaltetem Debug-Code:
zurück