Как установить параметры esp32 для обработки ошибок guru meditation error: core 1 panic'ed

olegrf67

✩✩✩✩✩✩✩
12 Апр 2023
4
0
У меня в части кода программы иногда при определенных условия происходит вылетание и ошибка Guru Meditation Error: Core 1 panic'ed() и далее дамп. Сейчас некогда разбираться с этим кодом, нужно уделить время другим частям программы. Но проблема в том, что после этого события ESP32 не перезагружается, а тупо зависает. Мне нужно чтобы она перезагружалась (по аналогии с вотчдогом). Поискал и нашел статью про то, что можно настроить реакцию ESP32 на срабатывание Guru Meditation Error и выбрать реакцию, статья вот здесь: https://russianblogs.com/article/9752155918/

Там написано, что можно использовать CONFIG_ESP32_PANIC Параметры конфигурации задают последующее поведение обработчика Panic. И установить параметр: Тихая перезагрузка (CONFIG_ESP32_PANIC_SILENT_REBOOT) - Не печатайте регистр или трассировку, немедленно перезапустите чип. Мне это и нужно, но я не знаю где и как устанавливать этот параметр, как использовать этот CONFIG_ESP32_PANIC. Учитывая, что пишу я на MicroPython с использованием прошивки esp32-20210902-v1.17.bin.

Подскажите пожалуйста вообще возможно ли в моём случае это где-то задать или это касается только использования ArduinoIDE и языка C?
 

Alex_HF

★✩✩✩✩✩✩
11 Мар 2023
40
16
В случае с MicroPython у меня для вас плохие новости - прошивка "esp32-20210902-v1.17.bin" уже собрана.
CONFIG_ESP32_PANIC_SILENT_REBOOT - это #define компилятора (параметр в sdkconfig).
Если вы откомпилируете эту требулду https://github.com/micropython/micropython/tree/master/ports/esp32 с этой опцией - то получите желаемое.
Код:
# CONFIG_ESP32_PANIC_PRINT_HALT is not set
CONFIG_ESP32_PANIC_PRINT_REBOOT=y                   <-напечатает и перезагрузит (опция по-умолчанию)
# CONFIG_ESP32_PANIC_SILENT_REBOOT is not set
# CONFIG_ESP32_PANIC_GDBSTUB is not set
 
Изменено:
  • Лойс +1
Реакции: olegrf67

olegrf67

✩✩✩✩✩✩✩
12 Апр 2023
4
0
@Alex_HF,
Большое спасибо, можете вкратце объяснить что это за треблуда, кто её сделал? Я так понял это то же самое практически, что стандартная прошивка, но модифицированная каким-то частным лицом?
 

Alex_HF

★✩✩✩✩✩✩
11 Мар 2023
40
16
Это официальный github вашего MicroPython. Мельком посмотрев их конфигурацию в https://github.com/micropython/micropython/tree/master/ports/esp32/boards (смотрите файлы sdkconfig.***) я не нашел вообще указания каких-либо опций по CONFIG_ESP32_PANIC_. Почему они так сделали - остается загадкой.
Вот выдержка из https://github.com/espressif/esp-idf/blob/master/components/esp_system/panic.c
C++:
#if CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT || CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT

    if (esp_reset_reason_get_hint() == ESP_RST_UNKNOWN) {
        switch (info->exception) {
        case PANIC_EXCEPTION_IWDT:
            esp_reset_reason_set_hint(ESP_RST_INT_WDT);
            break;
        case PANIC_EXCEPTION_TWDT:
            esp_reset_reason_set_hint(ESP_RST_TASK_WDT);
            break;
        case PANIC_EXCEPTION_ABORT:
        case PANIC_EXCEPTION_FAULT:
        default:
            esp_reset_reason_set_hint(ESP_RST_PANIC);
            break; // do not touch the previously set reset reason hint
        }
    }

    panic_print_str("Rebooting...\r\n");
    panic_restart();
#else /* CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT || CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT */
    disable_all_wdts();
    panic_print_str("CPU halted.\r\n");
    while (1);
#endif /* CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT || CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT */
Если не задан CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT или CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT проц останется в вечном цикле.
 

olegrf67

✩✩✩✩✩✩✩
12 Апр 2023
4
0
Спасибо, но я к сожалению совсем не разбираюсь в компиляциях, просто получилось, что приходится доделывать программу за другим человеком. В микропитоне я немного разобрался, но в компиляциях темный лес. Может быть можно договориться чтобы вы мне сделали прошивку, которая при обработке Guru Meditation Error просто перезагружала бы ESP32? А я отблагодарю материально, можно в личке договориться :)