Last Updated on 7. Januar 2021 by sfambach
Gerade bei der Entwicklung auf dem Mircocontroller ist hier und da mal eine Ausgabe wichtig, um zu erahnen, ob der entwickelte Code auch das richtige macht. Schade ist es wenn solche Ausgaben dann immer noch das fertige Produkt belasten. Damit der Debugging code es nicht oder nur bedingt ins Endprodukt schafft gibt es in nahezu allen Framework mechanismen. An dieser Stelle möchte ich die Mechanismen der IDF vorstellen.
Debugging Nachrichten können mit dem folgenden Marco erzeugt werden.
static const char* TAG = "logname";
ESP_LOGx(TAG, "Text mit Platzhalter für parameter %d %s ... ", parameterliste);
Mögliche Befehle für die einzelnen Level:
Der Loglevel wird entweder im Menuconfig gesetzt, der höchster ist Verbose und niedrigster ist Error hier werden nur noch die Fehler ausgegeben. No output unterdrückt die Logausgabe ganz.
Die Vorkonfiguration kann mit dem folgenden Define überschrieben werden, hierbei muss der Loglevel kleiner gleich dem vorkonfigurierten sein. (Wenn in Menuconfig Loglevel = Info ist kann er im Define nicht Debug sein):
#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE // ESP_LOG_ERROR ...
Hier der Beispiel Code
Mit Loglevel Verbose:
Sieht die Ausgabe im Monitor so aus:
Im Loglevel Warning:
Sieht die Ausgabe wie folgt aus:
Je nach Loglevel werden die nicht benötigten Ausgaben durch den Präprozessor aus dem Code entfernt.
Es ist möglich auf Basis der Tags den loglevel auf Modulebene zu verfeinern. Auch der Loglevel auf Modulebene kann nicht höher als der gesamt Loglevel sein. D.h. wenn der allgemeine Loglevel Warning ist kann der Modulbezogenen Loglevel nur Warning oder Error ausgeben, eine Anagabe von Info würde nicht berücksichtigt werden.
Fazit
Logging ist ein essentieller Mechanismus, noch schöner ist es wenn er so einfach zu handhaben ist wie in der IDF. Es werden keine zusätzlichen Biblitoheken benötigt und alles funktioniert wie es soll.