Здравствуйте
Иногда при подаче питания на esp32, происходит зависание микроконтроллера. И через не которое время (9 секунд) происходит перезагрузка с ошибкой rst:0x10 (RTCWDT_RTC_RESET)
Как выяснил из даташита, срабатывает сторожевой таймер rtc, у которого время по умолчанию установлено 9сек.
Подскажите как изменить это время, например на 3 секунды?
Да, мне известна причина зависания. И она не в коде. Меня это устраивает, только хочу уменьшить время ожидания перезагрузки.
Поэтому интересует, как можно изменить время именно этого сторожевого таймера, с 9 секунд по умолчанию, на 3 секунды.
Вам нужно скомпилировать свой бутлоадер с нужным временем. Но задача эта очень специфичная (для обычного пользователя) и скорее всего готового решения вы здесь не получите. Попробуйте спросить на форуме ESP32 (наверное такой есть) - насколько это сложно.
Дополнение. Это справедливо, если зависание и перезагрузка происходят действительно до начала выполнения основной программы.
2UPPER: глубокомысленные и бессмысленные советы. Ты посмотри на ник. его историю и пойми, что уровень вопроса совершенно не соответствует подготовке персонажа.
делать этого не надо. 9 сек не просто так придуманы. В некоторых случаях старт - долгий.
Если уверен, что так надо сделать, то очень легко найти ответ - как?
В IDF - это в меню-конфиге настраивается. Опция: CONFIG_BOOTLOADER_WDT_TIME_MS
В Ардуино, без камлания и бубна меню-конфиг недоступен (тыц). Менять файлы в аддоне - некоторые смогут, но точно не ТС.
А я было расстроился, дамал не то что дельного совета не получишь, так еще и не поиздеваются) А нет, все тот же любимый форум)))
Думаю, 9 сек взято по умолчанию, лишь как перестраховка под полный потенциал микроконтроллера. А старт моего проекта вкладывается примерно в секунду, вот и подумал уменьшить время сброса.
Ну раз, таким как я, решить этот вопрос программно не под силу, тогда воспользуюсь костылем по железу из даташита. Просто не очень хотелось разводить плату по-новому.
В любом случае, всем спасибо за советы.
Так я ж без обид) мне не впервой))
Я прекрасно осознаю, что это для меня далеко не простая задача, но все же. Думаю во всем можно разобраться, было бы желание.
Всех услышал, вектор направления получил)
Решу проблему железом, а параллельно буду разбираться с меню-конфиг)
Еще раз спасибо!
Он ни чем не занят, так он зависший, и продолжал бы быть таковым и дальше, если бы не защита ввиде RTCWDT, настроенного по умолчанию на 9сек. И защита эта добавлена изначально неспроста, судя по информации из даташита, такое зависание “обычное дело” для esp, при определенных условиях.
Нет. Зависал бы он в моем коде, я бы применил сторожевой таймер в коде и проблемы б не было. Сразу отвечу, я добавлял WDT в код, это не помогает, так как до моего кода дело не доходит.
Как бы правильно выразился, чтоб не резало слух дядькам с бородой, он может зависать и зависает в начале, инициализируя какие-то внутренние параметры/настройки, ХЗ чем он там занимается на старте пред началом выполнения кода. Но факт на лицо. Я бы не был в этом так уверен, если б об этом не упоминалось в документации.
Периферия тоже исключена, проверено.
rkit, это точно? В даташите вроде шла речь об параметрах этого таймера, о чем здесь выше уже писал WladDrakula (меню конфиг), но я пока не разобрался. Переспрашиваю, чтоб зря не ломать голову, а решать вопрос с железом.
Железом тоже занимаюсь.
А я почему то уверен, что зависает контроллер именно из за некорректно написанного кода. Если бы он зависал из за системного кода - давно бы уже это обсуждалось многими пользователями.
У всех все работает и не зависает, а у вас зависает. Есть о чем задуматься, не так ли?
У меня используются и ESP32 и ESP8266 в большом количестве.
При старте, на всех, инкрементируется счетчик стартов и записывается в энергонезависимую память. счетчик стартов публикуется по MQTT на OpenHAB.
По нулям счетчики годами, увеличиваются только при перебоях с питанием, но это на всех контроллерах + уведомление об отключении питания в OpenHAB, а из него PUSH на телефон.
Нет перезапусков по WDT.