На моей плате esp32dev я использовал сторожевой таймер следующим образом, и он работал отлично.
// 1) include
#include <Arduino.h>
#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <esp_task_wdt.h>
#include <esp_log.h>
#include <soc/rtc_wdt.h>
// 2) activate the watchdog
watchdogRTC();
// 3) reset timer of the watchdog
rtc_wdt_feed(); //Alimenta o RTC WDT
// 4) code to test
if (Serial.available())
{
while(1){
Serial.println("preso");
delay(1000);
}
}
// 5) final functio
void watchdogRTC()
{
rtc_wdt_protect_off(); //Disable RTC WDT write protection
//Set stage 0 to trigger a system reset after 1000ms
rtc_wdt_set_stage(RTC_WDT_STAGE0, RTC_WDT_STAGE_ACTION_RESET_RTC);
rtc_wdt_set_time(RTC_WDT_STAGE0, 9000);
rtc_wdt_enable(); //Start the RTC WDT timer
rtc_wdt_protect_on(); //Enable RTC WDT write protection
}
Platformio.ini
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
board_build.f_flash = 80000000L
На моем esp32-s3-devkitc-1, используя тот же подход, я получаю ошибки:
«RTC_WDT_STG_SEL_OFF» не был объявлен в этой области, «RTC_WDT_STG_SEL_INT» не был объявлен в этой области. «RTC_WDT_STG_SEL_RESET_CPU» не был объявлен в этой области. «RTC_WDT_STG_SEL_RESET_SYSTEM» не был объявлен в этой области. «RTC_WDT_STG_SEL_RESET_RTC» не был объявлен в этой области.
Platformio.ini
[env:esp32-s3-devkitc-1]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
monitor_speed = 115200
board_build.f_flash = 80000000L
Спасибо за ответ. похоже, что это не реализовано до сих пор. Есть ли способ создать функциональный WatchDog, работающий на плате разработчика ESP32-S3?





ответ на эту задачу Иван Грохотков (разработчик Espressif) из https://github.com/espressif/esp-idf/issues/8038#issuecomment-1091860842
Если вам не нужен конкретно заголовок rtc_wdt.h, но вам нужно использовать сторожевой таймер RTC, вы можете попробовать использовать вместо него компоненты/hal/include/hal/wdt_hal.h (hal/wdt_hal.h). Как и rtc_wdt.h, это «частный» заголовок, который может измениться в будущем несовместимым образом. Но он поддерживается на всех чипах.
К сожалению, на данный момент у нас нет стабильного общедоступного API для сторожевого таймера RTC.