{"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_73 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 Content\"><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\" title=\"Grunds\u00e4tzliches\">Grunds\u00e4tzliches<\/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\" title=\"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\" title=\"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\" title=\"Conclusion\">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\" title=\"Related Posts\">Related Posts<\/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\" title=\"Sources\">Sources<\/a><\/li><\/ul><\/nav><\/div>\n\n<p>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\u00f6chte ich die Mechanismen der IDF vorstellen. <\/p>\n\n\n\n<p>Debugging Nachrichten k\u00f6nnen 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\u00fcr parameter %d %s ... \", parameterliste);\n<\/code><\/pre>\n\n\n\n<p>M\u00f6gliche Befehle f\u00fcr 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>Der Loglevel wird entweder im Menuconfig gesetzt, der h\u00f6chster ist Verbose und niedrigster ist Error hier werden nur noch die Fehler ausgegeben. No output unterdr\u00fcckt 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>Die Vorkonfiguration kann mit dem folgenden Define \u00fcberschrieben 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>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<\/a>');\ndocument.write('<div><a href=\"https:\/\/downgit.github.io\/#\/home?url=https:\/\/github.com\/'+project+'\" target=\"_blank\">Download des Projektes mit DownGit<\/a><\/div>');\n\ndocument.write('<div style=\"font-size:1vw\">');\ndocument.write('<script src=\"https:\\\/\\\/gist-it.appspot.com\\\/github.com\\\/'+test+'\\?slice='+startAt+':'+endAt+'\"><\\\/script>');\ndocument.write('<\/div>');\n\n<\/script>\n\n\n\n<p>Mit Loglevel Verbose:<\/p>\n\n\n\n<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>\n\n\n\n<p>Sieht die Ausgabe im Monitor so aus:<\/p>\n\n\n\n<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>\n\n\n\n<p>Im Loglevel Warning:<\/p>\n\n\n\n<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>\n\n\n\n<p>Sieht die Ausgabe wie folgt aus:<\/p>\n\n\n\n<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>\n\n\n\n<p>Je nach Loglevel werden die nicht ben\u00f6tigten Ausgaben durch den Pr\u00e4prozessor aus dem Code entfernt.<\/p>\n\n\n\n<p>Es ist m\u00f6glich auf Basis der Tags den loglevel auf Modulebene zu verfeinern. Auch der Loglevel auf Modulebene kann nicht h\u00f6her 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\u00fcrde nicht ber\u00fccksichtigt werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Fazit\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Logging ist ein essentieller Mechanismus, noch sch\u00f6ner ist es wenn er so einfach zu handhaben ist wie in der IDF. Es werden keine zus\u00e4tzlichen Biblitoheken ben\u00f6tigt und alles funktioniert wie es soll.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Verwandte_Beitrage\"><\/span>Related Posts<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><a href=\"https:\/\/www.fambach.net\/en\/?p=6943\">Hauptbeitrag<\/a><\/p>\n\n\n<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<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Quellen\"><\/span>Sources<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><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>\n\n\n\n<p><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>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 &#8230;<\/p>\n<a href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/\" class=\"read-more-link\">Continue reading <span class=\"screen-reader-text\">\"Espressif IDF &#8211; GPIOs\"<\/span> <span class=\"meta-nav\">&rarr;<\/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],"modified_by":"sfambach","_links":{"self":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/7134"}],"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:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/media\/7050"}],"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}]}}