Last Updated on 15. October 2026 by SuffocationLink status: OK
Die Fehlerbehandlung ist in der IDF eine der Kernfunktionalitäten. Auf sie stößt man praktisch in jedem Beispiel-Programm. Deshalb möchte ich an dieser Stelle näher auf sie eingehen.
Alle wichtigen Funktionen der IDF geben Fehlercodes zurück. Hierauf kann zum einen manuell reagiert werden (if Bedingung + eigenes Handling) oder sie können an ein spezielles Makro (Funktion) zur Ausgabe und Behandlung weitergeleitet werden.
ESP_ERROR_CHECK( int Fehler );
ESP_ERROR_CHECK( funktionDieInstZurückGibt( ParamDerFunktion ) );
In der Praxis sieht das dann meist so aus:
ESP_ERROR_CHECK(gpio_config(&config));
ESP_ERROR_CHECK(esp_timer_create(&periodic_timer_args, &periodic_timer));
ESP_ERROR_CHECK(esp_timer_start_periodic(periodic_timer, 500000));
ESP_ERROR_CHECK(esp_sleep_enable_timer_wakeup(500000));
Dieses Verfahren macht den Code zum einen sicherer, da Fehler nicht unterschlagen werden und „ausführliche“ Fehlermeldungen erstellt werden. Zum anderen sorgt es aber auch dafür, dass der Code schlechter lesbar ist. Sicherlich besser lesbar wäre das folgende Vorgehen:
// Ersatz für ESP_ERROR_CHECK(gpio_config(&config));
int error = gpio_config(&config);
ESP_ERROR_CHECK(error);
// Ersatz für ESP_ERROR_CHECK(
// esp_timer_start_periodic(periodic_timer, 500000));
error = esp_sleep_enable_timer_wakeup(500000);
if(error != ESP_OK){
ESP_ERROR_CHECK(error);
} else {
// mache was anderes
}
Aber keine Angst vor der kurzen Schreibweise, man gewöhnt sich schnell daran. Hier noch die Links zu möglichen Fehlercodes und zur entsprechenden Doku der IDF
IDF-FehlercodesLink status: OK
IDF- FehlerbehandlungLink status: OK
Das Verhalten bei Fehlern kann über die Konfiguration beeinflusst werden. Normal ist „Print register and reboot“ eingestellt, das nervt aber eher, als es hilft. Deswegen habe ich es bei mir auf „Print registers and halt“ eingestellt, dann wird nach dem Fehler angehalten und es ist leichter, die Ausgabe zu inspizieren.

Kleiner Tipp: Im IDF Monitor werden die Codezeilen der Fehler angezeigt.

So sieht der Testcode aus:
Source code main.c (GitHubLink status: OK)
/** idf example
*
* 2. Example Check for error
*
* Some parts are copied from the official idf examples found on
* https://docs.espressif.com/projects/esp-idf/en/latest/esp32/
*
* Modified by SteFam @ http://www.fambach.net
*
* GPLv3
* Blah blah blah, free to use.
* I invested some time and mony in those examples if you want to delete this header
* please do not forget to mention at least my website, thanks!
*/
#include <stdio.h>
#include <esp_system.h>
#include <esp_err.h>
void app_main(void)
{
//* setup timer
printf("Simply give ok code to check function and see whats happend\n");
ESP_ERROR_CHECK(ESP_OK);
printf("And hopefully you see nothing between this and the last output\n");
printf(esp_err_to_name(0x106));
char text[30];
esp_err_to_name_r(0x105,text,30);
printf(text);
// undocument this to produce an error
//ESP_ERROR_CHECK(ESP_ERR_INVALID_MAC);
}
Eigenen Fehler können
Wenn eigene Funktionen auf Fehler laufen können, sollte hier ebenfalls eine Fehlermeldung zurückgegeben werden. Im besten Fall gibt man eine schon existierende Fehlermeldung zurück. (Beispiel aus der IDF DokuLink status: OK)
sdmmc_card_t* card = calloc(1, sizeof(sdmmc_card_t));
if (card == NULL) {
return ESP_ERR_NO_MEM;
}
esp_err_t err = sdmmc_card_init(host, &card);
if (err != ESP_OK) {
// Clean up
free(card);
// Propagate the error to the upper layer
// (e.g. to notify the user).
// Alternatively, application can define and
// return custom error code.
return err;
}
Conclusion
Die Fehlerbehandlung der IDF findet breite Anwendung. Der Code wird hierdurch nicht unbedingt übersichtlicher, bleibt aber schön kurz.
Related Posts
Main contributionLink status: Broken
Sources
IDF-FehlercodesLink status: OK
IDF- FehlerbehandlungLink status: OK
| Date | Change | Author |
|---|---|---|
| 15.10.2026 | Beispielcode als Code-Block eingefügt (Einbettung über gist-it.appspot.com funktionierte nicht mehr) | Suffocation |
| 04.10.2026 | Rechtschreibung korrigiert: Tippfehler, Kommas, Groß-/Kleinschreibung, Grammatik | Suffocation |
| 03.10.2026 | Log-Liste eingefügt | Suffocation |
| 07.01.2021 | Post created | Suffocation |