Как перезапустить ESP32 при любом исключении?

При разработке большого количества проектов (в Arduino IDE) для ESP32 одной из распространенных проблем, с которой я сталкиваюсь, является прекращение выполнения программы при необработанных исключениях. Есть различные исключения, которые я получаю. Например: stack canary watchpoint triggered (looptask), invoke_abortи т. Д. Я понятия не имею, как с ними обращаться, поэтому предпочитаю перезапускать ESP вручную.

Есть ли способ , которым я могу автоматически перезапустить ESP32 при всех необработанных или неудачных исключениях , кроме обработки исключений?

, 👍3

Обсуждение

Я мало знаю о внутренностях ESP32, но сработает ли для этого сторожевой таймер? Или, может быть, изменить процедуру паники так, чтобы она сбрасывала MCU?, @ocrdu

@ocrdu привет . можете ли вы помочь мне с примером кода для изменения процедуры паники, чтобы она сбрасывала MCU., @Androing

Нет, извините, я никогда не делал этого на ESP32. Хотя, похоже, можно погуглить. Сторожевой пес - это не вариант?, @ocrdu

я отключил сторожевой пес, так как он вызывает проблемы в моем потоке кода., @Androing

он должен перезагружаться всякий раз, когда что-то взрывается, я никогда не вижу, чтобы кто-то просто разбился, так что вы, должно быть, что-то изменили. не отключайте сторожевой пес, вместо этого устраняйте проблемы., @dandavis

У меня есть проблемы с ESP8266, работающим в течение нескольких дней, после чего он перестанет общаться с шиной I2C. Мое решение состояло в том, чтобы следить за переключением PIN на одном из расширителей портов, и если он не сработает, то отключит всю систему, а затем перезапустит ее, убив мощность, а затем снова включив. Поскольку мои переменные менялись не очень часто, я держу их в NVM. Надеюсь, это поможет., @Gil

@Gil у меня тоже были проблемы с i2c, но вызов Wire.begin() снова исправил это без перезагрузки., @dandavis

Ну, а почему бы не исправить ваше приложение, чтобы оно никогда не выбрасывало исключений? Это был бы единственный серьезный способ решить проблему. (Исключения подтверждают правило, например удаленное приложение с высокими требованиями к надежности, но низким качеством. Однако любой перезапуск должен привести к появлению расширенной версии.), @the busybee


1 ответ


1

Я не знаю, хорошо ли я понимаю ваш вопрос, но если вы хотите сбросить MCU программно, watchdog - хорошее решение. Другой способ - подключить порт ввода-вывода и порт сброса с помощью провода и отправить сигнал (отправить низкое или высокое напряжение на порт сброса) на порт сброса.

Или используйте asm-код.

,

Привет. сторожевой пес не только срабатывает., @Androing