Wie man den ESP-IDF-Fehler behebt: GPIO isr service is not installed

Problem

Sie versuchen, die ESP-IDF GPIO-Interrupts-API zu verwenden, aber Ihr ESP stürzt in einer Schleife ab mit folgenden Fehlermeldungen:

gpio_isr_error_log.txt
E (374) gpio: gpio_isr_handler_add(527): GPIO isr service is not installed, call gpio_install_isr_service() first
ESP_ERROR_CHECK failed: esp_err_t 0x103 (ESP_ERR_INVALID_STATE) at 0x400d1584
file: "src/main.cpp" line 478
func: void app_main()
expression: gpio_isr_handler_add(rx_config.gpio_num, onDALIReceive, (void*)0 )

abort() was called at PC 0x40086117 on core 0

Lösung

Sie müssen gpio_install_isr_service() aufrufen, bevor Sie gpio_isr_handler_add() aufrufen!

Hier ist ein Beispiel:

gpio_install_isr_service.cpp
#include <driver/gpio.h>

void app_main() {
    ESP_ERROR_CHECK(gpio_install_isr_service(0 /* No flags */));
    // Now you can add your GPIO interrupt handlers
    // ...
    ESP_ERROR_CHECK(gpio_isr_handler_add(GPIO_NUM_2, myGPIOInterrupt, nullptr));
}

Beachten Sie, dass der Aufruf von gpio_install_isr_service() grundsätzlich inkompatibel mit der Verwendung der Funktion gpio_set_intr_type() ist. Sie können also nicht beide im selben Projekt verwenden.


Check out similar posts by category: ESP32, ESP-IDF, C/C++