Как перезапустить ESP32 при любом исключении?
При разработке большого количества проектов (в Arduino IDE) для ESP32 одной из распространенных проблем, с которой я сталкиваюсь, является прекращение выполнения программы при необработанных исключениях. Есть различные исключения, которые я получаю. Например: stack canary watchpoint triggered (looptask)
, invoke_abort
и т. Д. Я понятия не имею, как с ними обращаться, поэтому предпочитаю перезапускать ESP вручную.
Есть ли способ , которым я могу автоматически перезапустить ESP32 при всех необработанных или неудачных исключениях , кроме обработки исключений?
@Androing, 👍3
Обсуждение1 ответ
Я не знаю, хорошо ли я понимаю ваш вопрос, но если вы хотите сбросить MCU программно, watchdog - хорошее решение. Другой способ - подключить порт ввода-вывода и порт сброса с помощью провода и отправить сигнал (отправить низкое или высокое напряжение на порт сброса) на порт сброса.
Или используйте asm-код.
Привет. сторожевой пес не только срабатывает., @Androing
- esp32 Stack canary watchpoint срабатывает
- ESP32S v1.1 NodeMCU vs ESP32 DevKitV1
- Почему функция server.on() из "ESPAsyncWebServer.h" выполняется на стороне setup(), а не на стороне loop()?
- esp32-cam публикует изображение в mqtt
- WindowsError(31, "Устройство, подключенное к системе, не функционирует") в arduino
- Как очистить кучу памяти в esp32
- ESP-NOW и Wi-Fi, и OTA одновременно на Отправителе и Получателе
- PN532 не обнаруживает RFID-карту при подключении к ESP32 в режиме I2C, но отлично работает с Arduino Uno
Я мало знаю о внутренностях ESP32, но сработает ли для этого сторожевой таймер? Или, может быть, изменить процедуру паники так, чтобы она сбрасывала MCU?, @ocrdu
@ocrdu привет . можете ли вы помочь мне с примером кода для изменения процедуры паники, чтобы она сбрасывала MCU., @Androing
Нет, извините, я никогда не делал этого на ESP32. Хотя, похоже, можно погуглить. Сторожевой пес - это не вариант?, @ocrdu
я отключил сторожевой пес, так как он вызывает проблемы в моем потоке кода., @Androing
он должен перезагружаться всякий раз, когда что-то взрывается, я никогда не вижу, чтобы кто-то просто разбился, так что вы, должно быть, что-то изменили. не отключайте сторожевой пес, вместо этого устраняйте проблемы., @dandavis
У меня есть проблемы с ESP8266, работающим в течение нескольких дней, после чего он перестанет общаться с шиной I2C. Мое решение состояло в том, чтобы следить за переключением PIN на одном из расширителей портов, и если он не сработает, то отключит всю систему, а затем перезапустит ее, убив мощность, а затем снова включив. Поскольку мои переменные менялись не очень часто, я держу их в NVM. Надеюсь, это поможет., @Gil
@Gil у меня тоже были проблемы с i2c, но вызов Wire.begin() снова исправил это без перезагрузки., @dandavis
Ну, а почему бы не исправить ваше приложение, чтобы оно никогда не выбрасывало исключений? Это был бы единственный серьезный способ решить проблему. (Исключения подтверждают правило, например удаленное приложение с высокими требованиями к надежности, но низким качеством. Однако любой перезапуск должен привести к появлению расширенной версии.), @the busybee