Необходимость ватчдога - прошу развеить сомнения

Тема в разделе "Флудилка", создана пользователем Рокки1945, 23 авг 2020.

  1. Рокки1945

    Рокки1945 Гуру

    Здравствуйте, - часто слышу о необходимости "внедрения" в устройство сторожевого таймера.
    Алгоритм работы ватчдога - установил битами регистр на нужное время если через это время ватчдог не сбросился(программно) - MCU ресетится и так по кругу.
    Прошу поделиться опытом так-ли необходим ватчдог в устройстве?
    Сам редко его использую - небольшой опыт, ну встало устройство его всегда можно перезагрузить - :).
    Спасибо!
     
  2. akl

    akl Гуру

    слышал что с некоторыми бутлодерами ардуино вачдог использовать нельзя - может заглючить намертво

    самое полезное в нем - возможность пробуждения от самого глубокого сна - то есть если делается супер-экономичное устройство, которое например раз в секунду что-то измеряет и отправляет, а все остальное время спит - обычно это просыпание делается при помощи ватчдога.
     
    Рокки1945 нравится это.
  3. parovoZZ

    parovoZZ Гуру

    Если МК работает полностью автономно, то он и не нужен.

    мы зависли в цикле, который сбрасывает вачдог. Но больше ничего не работает. Что дальше?
     
  4. Рокки1945

    Рокки1945 Гуру

    Ежели через заданное время таймер ватчдога не сбросится, произойдёт сброс микроконтроллера, он должен сбросится программно, то есть доползти до своего сброса - разве не так? Как понять автономно - конкретный пример если можно?
     
  5. parovoZZ

    parovoZZ Гуру

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

    мигать светодиодом.
     
  6. SergeiL

    SergeiL Оракул Модератор

    Тоже задумывался по поводу вочдога когда начинал разбираться с Ардуино.
    Именно с Ардуино, не с АТмегой.
    На АТмеге все просто - включал вочдог всегда. Сам все пишешь, там все однозначно.
    В ЕСП он включен изначально. Проверял - работает.

    А в Ардуино есть загрузчик, который довольно долго грузит код. Вочдог изначально не активирован. Проверял - нет сброса на while(1);
    Почитал, пишут, что с вочдогом нужно использовать другой загрузчик, в стандартном нет сброса вочдога.

    К тому же тогда писал код под Leonardo ETH, это с чипом W5500 на плате,
    заметил, что после загрузки кода в мегу, W5500 иногда подвисает, и ресет только меги уже не помогает восстановить работу с сетью.

    Взвесив все за против, и не найдя готового чипа с минимальной обвязкой, для обеспечения аппаратного ресета устройства с задержкой секунд в 30, сделал аппаратный вочдог на ATtyny13. Вход подключен к выходу встроенного LED. LED мигает - идет сброс на вочдог.
    Мега проверяет наличие доступа по сети, и если нет - блокирует сброс вочдога, который сбрасывает все устройство (мега+W5500) аппаратно.
    Но за более чем три года работы устройства, несанкционированных сбросов обнаружено не было, как и некорректной работы устройства.
    Я беспокоился за сторонние библиотеки типа Ethernet, но нормально они написаны, все работает надежно.

    Поэтому Вам решать нужен Вам вочдог или нет.
     
    Рокки1945 нравится это.
  7. Daniil

    Daniil Гуру

    устройство стоит в поле (дырка в земле, качаем газ) - зависло (причин зависания можно придумать огромное количество от ЯВ, до выхода за границы массивп). Нет ни свободных рук, ни обученных сотрудников (не каждый работник имеет право перезгружать приборы) - собака поможет.

    Сбрасывать его нужно в самом дубовом месте, я сбрасываю в осном цикле.
     
  8. Рокки1945

    Рокки1945 Гуру

    Для этого нужен оптибут
     
  9. Рокки1945

    Рокки1945 Гуру

    Хорошо если устройство автономное (как подсказали выше) и после перезапуска сразу переходит к выполнению заданного алгоритма в программе.
    А вот пример такой: для того чтобы устройство перешло к выполнению программы, нужно нажать кнопку - пусть это будет запуск реле.
     
  10. Рокки1945

    Рокки1945 Гуру

    Сергей, - что тут сказать нужна практика., спасибо за опыт.
     
  11. Рокки1945

    Рокки1945 Гуру

    Ну тогда остаётся только настроить прерывание+сброс, перед сбросом выполнять какие-то визуальные эффекты - типа на дисплее произошёл зависон и поэтому я-микроконтроллер сбрасываюсь на начало.
    Честно говоря не понимаю - чем плох сброс ватчдога в цикле, не могу догнать............
     
  12. parovoZZ

    parovoZZ Гуру

    Прям из дырки?

    а если нет такого цикла? И где гарантия того, что не будет зацикливания в этом цикле? Банальное ожидание флага с помощью while () {сброс вачдога} может подвесить устройство навсегда.

    в продвинутых МК вачдог оконный. Т.е. если сброс вачдога пришёл не вовремя (раньше времени), то это значит, что в какой-то цикл мы не зашли. По хорошему, необходимо собирать флаги со всех циклов, где происходит обмен данными с внешним миром и уже анализируя эти флаги принимать решение о сбросе вачдога. Если сам МК переключает программный счётчик, то надо менять МК - он неисправен. Ежели программа написана так, что можем зациклиться, то надо переписывать программу.
     
    Рокки1945 нравится это.
  13. parovoZZ

    parovoZZ Гуру

    В дурине уже таких проблем нет.
     
    Andrey12 нравится это.
  14. ИгорьК

    ИгорьК Гуру

    Товарищ в принципе не знает что такое Ардуино: чуть раньше им утверждалось, что увлечение Ардуино длилось всего (целых?) две недели.
    Да и на, скажем так, сомнительных, бездоказательных утверждениях он ловился не раз.

    На тему собаки лучше изучить пару ссылок:
    https://habr.com/ru/post/189744/
    https://forum.arduino.cc/index.php?topic=63651.45
     
    SergeiL и Daniil нравится это.
  15. parovoZZ

    parovoZZ Гуру

    лучше почитать даташит. У разных AVR она работает по-разному. В полноценных AtMega можно выбрать режим работы: или она работает как ещё один асинхронный таймер или же как именно вачдог. Если как вачдог, то у него есть ещё пара режимов:
    1. сброс сразу при переполнении счётчика
    2. сперва прерывание, а при повторном переполнении сброс.

    У аттинек выбора, как правило, нет, поэтому там доступен только пункт 2.
     
  16. ИгорьК

    ИгорьК Гуру

    Ну, я оказался прав, что товарищ не знает что такое Ардуино.
    Или, сейчас, мы получим ссылку на даташит Ардуино и разберемся с собакой?

    Объясните, пожалуйста, товарищу разницу между АтМегой и Ардуино!
     
  17. b707

    b707 Гуру

    если устройство автономное и должно работать в режиме 24/7, то ватчдог поможет от неожиданных зависаний.
    Главное преимущество ватчдога - что перезагрузка зависшего контроллера происходит автоматически. Если еще и программа написана так, что она продолжает работу с того места. где зависла - вы вообще не заметите зависания, будет казаться что МК работает непрерывно.

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

    Практический опыт -на базе ардуино сделал радиоуправляемый прессостат (реле давления) на компрессоре. Поначалу программа зависала 3-5 раз в день, поэтому использовал ватчдог, чтобы не бегать к компрессору перегружать МК. Параллельно переработал код, нашел пару грубых ошибок, а так же для защиты от наводок добавил на ардуину несколько конденсаторов. В результате после доработки больше не вижу в логах следов срабатывания ватчдога, но. конечно. убирать его из кода не стал, мало ли что, с ним надежнее
     
    Рокки1945, Daniil, Andrey12 и ещё 1-му нравится это.
  18. ИгорьК

    ИгорьК Гуру

  19. b707

    b707 Гуру

    Паровоз, не пиши бредятину. Ватчдог в первую очередь предназначен для борьбы с аппаратными зависаниями МК, когда выполнение пользовательского кода прекращается ВООБЩЕ. Обычно это результат импульсных помех или нехватки памяти.
    А против нелепых ошибок в программе, когда исполнение застревает в цикле while(1), помогает только регулярная порка начинающих программистов :)
     
    Daniil и Andrey12 нравится это.
  20. ИгорьК

    ИгорьК Гуру

    эммммм... разве это чисто аппаратное зависание? В смысле, аппарат то завис, но вызвано это не программным кодом?