{"id":7134,"date":"2021-01-07T17:32:40","date_gmt":"2021-01-07T17:32:40","guid":{"rendered":"https:\/\/www.fambach.net\/?p=7134"},"modified":"2021-01-07T18:17:08","modified_gmt":"2021-01-07T18:17:08","slug":"espressif-idf-log-nachrichten","status":"publish","type":"post","link":"https:\/\/www.fambach.net\/en\/espressif-idf-log-nachrichten\/","title":{"rendered":"Espressif IDF \u2013 Log Messages"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Contents\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewbox=\"0 0 24 24\" version=\"1.2\" baseprofile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Grundsatzliches\" >Grunds&auml;tzliches<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Ausgang\" >Ausgang<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Eingang\" >Eingang<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Fazit\" >Conclusion<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Verwandte_Beitrage\" >Verwandte Beitr&auml;ge<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Quellen\" >Sources<\/a><\/li><\/ul><\/nav><\/div>\n\n<p class=\"wp-block-paragraph\">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&ouml;chte ich die Mechanismen der IDF vorstellen. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Debugging Nachrichten k&ouml;nnen mit dem folgenden Marco erzeugt werden. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>static const char* TAG = \"logname\";\n\nESP_LOGx(TAG, \"Text mit Platzhalter f&uuml;r parameter %d %s ... \", parameterliste);\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">M&ouml;gliche Befehle f&uuml;r die einzelnen Level:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"320\" height=\"161\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-03-13_34_22.jpg\" alt=\"\" class=\"wp-image-7048\"><figcaption>IDF Warnlevel Quelle: <a href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-reference\/system\/log.html\" target=\"_blank\" rel=\"noreferrer noopener\">IDF Logging<\/a><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Der Loglevel wird entweder im Menuconfig gesetzt, der h&ouml;chster ist Verbose und niedrigster ist Error hier werden nur noch die Fehler ausgegeben. No output unterdr&uuml;ckt die Logausgabe ganz.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"140\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-03-13_31_13.jpg\" alt=\"\" class=\"wp-image-7047\"><figcaption>IDF Menuconfig &#8211; Debugging Level einstellen<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Die Vorkonfiguration kann mit dem folgenden Define &uuml;berschrieben werden, hierbei muss der Loglevel kleiner gleich dem vorkonfigurierten sein. (Wenn in Menuconfig Loglevel = Info ist kann er im Define nicht Debug sein):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE \/\/ ESP_LOG_ERROR ...<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Hier der Beispiel Code<\/p>\n\n\n\n<script>\nvar project = \"sfambach\/espressif-idf\/tree\/master\/L3_Debug_Output\";\nvar file = \"\/main\/main.c\";\nvar test = project + file;\nvar startAt = 19;\nvar endAt = 0;\n\n\ndocument.write('<a href=\"https:\/\/github.com\/'+project+'\" target=\"_blank\">Link zu Git');\ndocument.write('<a href=\"https:\/\/downgit.github.io\/#\/home?url=https:\/\/github.com\/'+project+'\" target=\"_blank\">Download des Projektes mit DownGit<\/script><p>&#8218;);\n\ndocument.write(&#8218;<\/p><div style=\"font-size:1vw\">&#8218;);\ndocument.write(&#8218;<script src=\"https:\\\/\\\/gist-it.appspot.com\\\/github.com\\\/'+test+'\\?slice='+startAt+':'+endAt+'\"><\\\/script>');\ndocument.write('<\/script><p>&#8218;);\n\n\n\n\n\n<\/p><p class=\"wp-block-paragraph\">Mit Loglevel Verbose:<\/p><figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"501\" height=\"144\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-03-13_52_36.jpg\" alt=\"\" class=\"wp-image-7051\"><\/figure><p class=\"wp-block-paragraph\">Sieht die Ausgabe im Monitor so aus:<\/p><figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"449\" height=\"168\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-03-13_50_58.jpg\" alt=\"\" class=\"wp-image-7050\"><\/figure><p class=\"wp-block-paragraph\">Im Loglevel Warning:<\/p><figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"496\" height=\"140\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-03-13_52_55.jpg\" alt=\"\" class=\"wp-image-7052\"><\/figure><p class=\"wp-block-paragraph\">Sieht die Ausgabe wie folgt aus:<\/p><figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"542\" height=\"143\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-03-13_57_15.jpg\" alt=\"\" class=\"wp-image-7053\"><\/figure><p class=\"wp-block-paragraph\">Je nach Loglevel werden die nicht ben&ouml;tigten Ausgaben durch den Pr&auml;prozessor aus dem Code entfernt.<\/p><p class=\"wp-block-paragraph\">Es ist m&ouml;glich auf Basis der Tags den loglevel auf Modulebene zu verfeinern. Auch der Loglevel auf Modulebene kann nicht h&ouml;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&uuml;rde nicht ber&uuml;cksichtigt werden.<\/p><h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Fazit\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2><p class=\"wp-block-paragraph\">Logging ist ein essentieller Mechanismus, noch sch&ouml;ner ist es wenn er so einfach zu handhaben ist wie in der IDF. Es werden keine zus&auml;tzlichen Biblitoheken ben&ouml;tigt und alles funktioniert wie es soll.<\/p><h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Verwandte_Beitrage\"><\/span>Verwandte Beitr&auml;ge<span class=\"ez-toc-section-end\"><\/span><\/h2><p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.fambach.net\/en\/?p=6943\">Main contribution<\/a><\/p><div class=\"display-posts-listing\">\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-projekt-erstellen\/\">Espressif IDF \u2013 Create Project<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-konsolenausgabe\/\">Espressif IDF \u2013 Console Output<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-fehlerbehandlung\/\">Espressif IDF \u2013 Error Handling<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-log-nachrichten\/\">Espressif IDF \u2013 Log Messages<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-timer\/\">Espressif IDF \u2013 Timer<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-menuconfig\/\">Espressif IDF \u2013 Menuconfig<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks\/\">Espressif IDF \u2013 Tasks<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/\">Espressif IDF \u2013 GPIOs<\/a><\/div>\n<\/div>\n\n\n\n<\/p><h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Quellen\"><\/span>Sources<span class=\"ez-toc-section-end\"><\/span><\/h2><p class=\"wp-block-paragraph\"><a href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-reference\/error-codes.html\" target=\"_blank\" rel=\"noreferrer noopener\">IDF-Fehlercodes<\/a><\/p><p class=\"wp-block-paragraph\"><a href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-guides\/error-handling.html\" target=\"_blank\" rel=\"noreferrer noopener\">IDF- Fehlerbehandlung<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>When developing on the microcontroller, it's often important to have the occasional output to gauge whether the developed code is doing the right thing. It's a shame when such outputs still burden the finished product. So that the debugging code makes it into the final product, or only to a limited extent, there are in nearly\u2026<\/p>\n<a href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/\" class=\"read-more-link\">Carry on reading <span class=\"screen-reader-text\">\"Espressif IDF &#8211; GPIOs\"<\/span> <span class=\"meta-nav\">\u2192<\/span><\/a>","protected":false},"author":1,"featured_media":7050,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"no","_lmt_disable":"no","footnotes":""},"categories":[184,188,472,473,496],"tags":[497,148,499,465,474,492,476,500,491],"class_list":["post-7134","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-c","category-esp-32","category-esp32-s2","category-espressif-idf","category-how-to","tag-c-2","tag-esp32","tag-esp32s2","tag-espressif","tag-espressif-idf","tag-howto","tag-idf","tag-shulung","tag-tutorial","penguin-post","penguin-post-not-sticky"],"modified_by":"sfambach","_links":{"self":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/7134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/comments?post=7134"}],"version-history":[{"count":3,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/7134\/revisions"}],"predecessor-version":[{"id":7137,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/7134\/revisions\/7137"}],"wp:attachment":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/media?parent=7134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/categories?post=7134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/tags?post=7134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}