Espressif IDF – Error Handling

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.

idf.py menuconfig

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

Angabe der fehlerhaften Datei und Zeile

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

DateChangeAuthor
15.10.2026Beispielcode als Code-Block eingefügt (Einbettung über gist-it.appspot.com funktionierte nicht mehr)Suffocation
04.10.2026Rechtschreibung korrigiert: Tippfehler, Kommas, Groß-/Kleinschreibung, GrammatikSuffocation
03.10.2026Log-Liste eingefügtSuffocation
07.01.2021Post createdSuffocation
Changelog

Leave a Reply

Your email address will not be published. Required fields are marked *