vvip-68 / GyverPanelWiFi

Универсальная прошивка для широкоформатных матриц / гирлянд на балкон или стену / лампы с эффектами / часов с будильником-рассвет. Управление по WiFi в локальной сети или через MQTT-брокер.
286 stars 116 forks source link

Что-то не пойму логику работы с wdt на esp8266 #242

Closed Spider84 closed 1 year ago

Spider84 commented 1 year ago

А собственно как? В коде вижу следующее: https://github.com/vvip-68/GyverPanelWiFi/blob/163cd6ba6bd7e0465e920aeee4b1b7d7396ba07b/firmware/GyverPanelWiFi_v1.12/GyverPanelWiFi_v1.12.ino#L118

Но более нигде не вижу сброса таймера. Где вызов ESP.wdtFeed();?

Или я чего-то не знаю?

vvip-68 commented 1 year ago

А зачем он нужен? Каждый "заход" в loop() сбрасывает таймер (внутри системного кода, который вызывает этот loop). Время выполнения самого loop - заведомо меньше установленного "сторожевого порога" 8 сек - обычно это 20 мс... Простой вызов delay(0) кстати тоже сбрасывает таймер.

Spider84 commented 1 year ago

Где об этом сказано?

vvip-68 commented 1 year ago

Вот источники уже сами гуглите. Читайте документацию. Я за вас это искать не стану. Если найдете, что то, что я выше описал - не так. Поделитесь информацией.

Spider84 commented 1 year ago

Ну что я могу сказать. Документации на него нет. Сплошной треш. Я пошёл другим путём, к примеру ядро Arduino esp8266 мы же установили в Arduino и оно у нас есть по следующему пути: https://github.com/esp8266/Arduino/tree/master/cores/esp8266 там можно найти файлик Esp.cpp в котором обнаружить "исходный код" esp-шного, прости господи, wdt. Так вот они нигде не вызываются более. Там же есть файлик cores\esp8266\core_esp8266_main.cpp в нём есть loop_wrapper() который вызывает собственно loop() и там нет описанного выше функционала сброса wdt. Даже если пойти выше до loop_task() там тоже нет.

Так где? На основании чего сделано заявление?

vvip-68 commented 1 year ago

Исследование исходников - лучший способ понять как оно работает. Согласен. Почему вы считаете, что та должен быть именно вызов wdtFeed(), Внутри может быть вызов чего угодно. Вплоть до прямой записи в какие-нибудь регистры, которые сбрасывают таймер WDT. Что делается внутри самой wdtFeed()? Вы реально проверили все цепочку вызовов до loop()?

"Заявление" сделано на основании а) просто не помню в каком месте исходников / документации или форумов были подчеркнуты эти сведения б) по факту того, что оно работает и не перегружается по WDT при штатной работе и, соответственно, перегружается если "застрять" в каком-нибудь цикле на время большее таймера WDT без вызовов wdtFeed() или delay() что делает то же самое.

Spider84 commented 1 year ago

Да, прошерстил. в AVR реализации нашёл сброс. А в ESP нет. Как-то странно это всё.

Я к чему это поднял. у меня виснет вся эта конструкция спустя 2-3 часа работы колом. Замирает картинка последняя и никакой реакции. Помогает только снятие питания. Так вот судя по тому, что WDT где-то сбрасывается, виснет оно не полностью.

Добавил "костыль", будем посомотреть.

void process() {  

#if defined(ESP8266)
  if (millis()>=3600000U) {
    ESP.restart();
  }
#endif

...
}

ЗЫ. А уж то что некоторые эффекты в 146% случав сыплются, я вообще молчу. 3 шага к успеху пробовал, не могу найти причину. И SDK версию менял, и FastLED пробовал разный, и без Wifi/lwip собирал. К примеру Дождь и Северное сияние так и не удалось увидеть :)

vvip-68 commented 1 year ago

Ну тут вам скорее всего никто не поможет. Чтобы понять причину и как-то исправить - нужно суметь воспроизвести. У меня и других - ничего не сыплется. И умозрительно по коду тоже вроде нечему сыпаться. Какой размер матрицы, например? Что в это время пишется в логах. Если есть стек ошибки - что говорит о ней Exception Decoder? Что пишется после компиляции проекта - сколько памяти всего/осталось/доступно? Когда "через два-три часа зависает" - что пишется в мониторе порта? Какая версия ядра и FastLed использована по итогу? Есть ли какое-то оборудование кроме матрицы? Какие "фичи" включены - там MQTT / звуки / SD-карта / еще что-то?

vvip-68 commented 1 year ago

А замирать картинка может элементарно из за плохого контакта / непропая на линии DATA по которой битики бегут к светодиоду. Или в самОм сАмом первом светодиоде, который, к примеру, перегревается и перестает принимать(и передавать дальше) управляющую последовательность. Вариантов - масса. Для начала все же смотрите что в мониторе порта на этом зависании...

Spider84 commented 1 year ago

Там именно зависание. Проц колом. Нет ни даты ни порта.

vvip-68 commented 1 year ago

Перегрев? Нестабильное / некачественное шумящее питание? Помехи / наводки от чего-то рядом стоящего, возможно импульсные? Просто брак конкретного экземпляра микроконтроллера?

Spider84 commented 1 year ago

Модули меня (к слову это ESP-01) есть у меня от одного проекта горсть. От смены модуля толку ноль. Питание чистейшее как слеза девственницы, смотрел и осцилом, величина шума в районе 10мВ, что менее 0.5%. Хорошие жирные кондёры как керамика 0.1 так и танталы, там уже ёжик был из кондёров когда пробовал. Стоит она на подоконнике, где шуметь ещё чему-то кроме её собственного БП (железный такой в дырдочку модуль) нечему. Перегрев? Может быть, но когда я прихожу она уже холодная - да и прохладно на окне... Ну можно попробовать вжарить ей радиатор от малинки :)))

vvip-68 commented 1 year ago

Ну, у меня варианты кончились. Я не знаю как еще диагностировать проблему... Если какие-то фичи в скетче включены (в настройках) - пробуйте отключать по одному и ли отключить все, оставить только вывод на матрицу и смотреть при добавлении какой фичи станет "зависать". Отключите временно смену всех эффектов, выберите один. Если проработает более 2-3 часов, добавляйте другие. Имитации игр включайте в последнюю очередь. Они как были от Гайвера - так я их не трогал, Может в них что. У меня они почти все отключены.

vvip-68 commented 1 year ago

Ну, и многие тут хвалили проект WLED - попробуйте его. Управление - со всех каналов, куча эффектов, работают над ним вроде целая команда, весь код вылизан и вычищен, говорят что стабильная версия. Я не пробовал - это со слов других.