Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: WDT – Watchdog Timer
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
zombi
Кроме как для сброса плохо написанной "зависшей" программы для чего ещё можно использовать?
aaarrr
Для пробуждения из глубокого сна, для программного сброса.
zombi
Цитата(aaarrr @ Jun 21 2013, 18:38) *
Для пробуждения из глубокого сна, для программного сброса.

Возможно, но почему "программного"? может всётаки аппаратного?
aaarrr
Цитата(zombi @ Jun 21 2013, 19:51) *
Возможно, но почему "программного"?

Потому что инициирован программно.
_Артём_
Цитата(zombi @ Jun 21 2013, 18:51) *
Возможно, но почему "программного"? может всётаки аппаратного?

В том смысле, что программа вызывает сброс.
Так как не у всех АВР есть способ вызвать сброс МК через запрос, то можно для этого WDT использовать.
Smoky
Была ситуация, когда были заняты все таймеры. Я использовал WDT как дополнительный таймер с прерыванием от него.
ILYAUL
Часы можешь сделать - 1 сек там есть
ArtemKAD
Цитата
Кроме как для сброса плохо написанной "зависшей" программы для чего ещё можно использовать?

Для сброса хорошо написанной зависшей программы. Зависшей естественно обычно от внешних воздействий типа очень коротких помех или радиации.
Егоров
Цитата(ArtemKAD @ Jun 24 2013, 20:09) *
Для сброса хорошо написанной зависшей программы. Зависшей естественно обычно от внешних воздействий типа очень коротких помех или радиации.

Скажем так: для сброса добросовестно написанной программы.
Она, как правило, зависает из-за недостаточно полных представлений программиста или создателя алгоритма о реальных процессах в системе. Нештатного поведения датчиков, непредусмотренного стечения обстоятельств, внешнего разового воздействия.
Это реальность, особо укорять тут никого не следует, сторожевые таймеры применяют и весьма квалифицированные, опытные разработчики.
zombi
Цитата(Егоров @ Jun 24 2013, 21:58) *
Она, как правило, зависает из-за недостаточно полных представлений программиста или создателя алгоритма о реальных процессах в системе.

Т.е программисту который полностью представляет все реально происходящие процессы WDT не нужен.

Цитата(Егоров @ Jun 24 2013, 21:58) *
Нештатного поведения датчиков,

Не согласен.
Абсолютно любое поведение дачиков не должно приводить к зависанию программы.

Цитата(Егоров @ Jun 24 2013, 21:58) *
непредусмотренного стечения обстоятельств

Например?
Мне кажется что у добросовестно написанной программы как раз и не может быть непредусмотренных стечений обстоятельств.

Цитата(Егоров @ Jun 24 2013, 21:58) *
внешнего разового воздействия.

Это Вы про радиацию?


aaarrr
Цитата(zombi @ Jun 25 2013, 01:57) *
Мне кажется что у добросовестно написанной программы как раз и не может быть непредусмотренных стечений обстоятельств.

У добросовестно написанной программы, занимающейся, условно говоря, управлением светодиодом от кнопки - возможно; в объемной и разветвленной системе, активно взаимодействующей с внешним миром, предусмотреть все и вся, и обеспечить 100% тестовое покрытие невозможно. И пусть вероятность возникновения "аварийного" стечения обстаятельств будет крайне низкой, следует предусмотреть надежный и безопасный выход из такой ситуации.
zombi
Цитата(aaarrr @ Jun 25 2013, 01:14) *
в объемной и разветвленной системе, активно взаимодействующей с внешним миром, предусмотреть все и вся, и обеспечить 100% тестовое покрытие невозможно.

На мой взляд как раз в таких системах это просто необходимо и возможно.
А вот так вот недобросовестные программисты и обьясняют зависания своих недобросовестных программ.
aaarrr
Что поделать, слаб человек: и на МКС бортовые ЭВМ, бывает, зависают. Да что там далеко ходить, даже в уютном восьмибитном мирке не все справляются.
А если Вы полагаете, что "полностью представляете все реально происходящие процессы", значит, надо или переходить к более сложным процессам, или отказываться от иллюзий sm.gif
АНТОН КОЗЛОВ
Наоборот, сильно вдохновляет, что даже PC с виндами довольно редко виснут, с их гигабайтами и гигагерцами. Как-то даже не по себе. Какая реальная вероятность безотказной работы?
Егоров
Цитата(zombi @ Jun 25 2013, 00:57) *
Т.е программисту который полностью представляет все реально происходящие процессы WDT не нужен.
Абсолютно любое поведение дачиков не должно приводить к зависанию программы.
Мне кажется что у добросовестно написанной программы как раз и не может быть непредусмотренных стечений обстоятельств.

Если такой программист и существует, то только новичок или весьма самонадеянный человек.
Непредусмотренное стечение обстоятельств потому так и называется, что его невозможно предусмотреть. Именно из-за таких программистов потерян был "Фобос-грунт". После сеанса связи станция осталась ориентированной на Землю, бесконечно ждала сигнала "конец связи", который оператор просто забыл выдать. А гениальная программа не следила в это время за состоянием бортовых батарей. Они сели и станция замерзла.

"Абсолютно любое" поведение датчиков не знают даже их разработчики. Чтобы это поведение не приводило к зависанию программы существует сторожевой таймер. Ей-ей, его не дураки придумали.
Семин
Когда-то специально дал процессору несуществующую команду, хотел посмотреть что получится.
Собака не помогла, только общий сброс.
zombi
Цитата(Егоров @ Jun 25 2013, 06:49) *
Непредусмотренное стечение обстоятельств потому так и называется, что его невозможно предусмотреть.

Мне кажется что непредусмотренное стечение обстоятельств это как раз такое стечение обстоятельств которое забыл или не смог предусмотреть программист.
А для обстоятельств которые предусмотреть невозможно должно быть другое определение.

Цитата(Егоров @ Jun 25 2013, 06:49) *
Именно из-за таких программистов потерян был "Фобос-грунт". После сеанса связи станция осталась ориентированной на Землю, бесконечно ждала сигнала "конец связи", который оператор просто забыл выдать. А гениальная программа не следила в это время за состоянием бортовых батарей.

Если это действительно так, то именно из за непредусмотренной ситуации это и произошло.


Цитата(Егоров @ Jun 25 2013, 06:49) *
"Абсолютно любое" поведение датчиков не знают даже их разработчики. Чтобы это поведение не приводило к зависанию программы существует сторожевой таймер.

Сторожевой таймер существует не для предотвращения зависания а для выхода из оного.

Цитата(aaarrr @ Jun 25 2013, 02:24) *
Что поделать, слаб человек: и на МКС бортовые ЭВМ, бывает, зависают. Да что там далеко ходить, даже в уютном восьмибитном мирке не все справляются.

Давайте не будем трогать MKC,windows и т.д. а только восьмибитный мирок (согласно ветке форума)

Цитата(aaarrr @ Jun 25 2013, 02:24) *
А если Вы полагаете, что "полностью представляете все реально происходящие процессы", значит, надо или переходить к более сложным процессам, или отказываться от иллюзий sm.gif

Вот в этом и пытаюсь разобраться.

Цитата(aaarrr @ Jun 25 2013, 01:14) *
У добросовестно написанной программы, занимающейся, условно говоря, управлением светодиодом от кнопки - возможно; в объемной и разветвленной системе, активно взаимодействующей с внешним миром,

Дайте критерий программы активно взаимодействующей с внешним миром.
Программа анализирующая кнопку и управляющая светодиодом тоже считает себя активно взаимодействующей с внешним миром.
toweroff
Цитата(Семин @ Jun 25 2013, 12:58) *
Когда-то специально дал процессору несуществующую команду, хотел посмотреть что получится.
Собака не помогла, только общий сброс.

так если нет Undefined exception, с чего бы собаке виснуть?
проц как распознал, так и выполнил, а прерывание таймера как работало, так и работает. Собака обновляется - значит и сброса нет
Егоров
Цитата(zombi @ Jun 25 2013, 13:56) *
Давайте не будем трогать MKC,windows и т.д. а только восьмибитный мирок (согласно ветке форума)

Вы, похоже, плохо знаете восьмибитный мирок. "Пионер" уже ушел за пределы Солнечной системы, облетел несколько планет, открыл несколько спутников, передал массу хороших цветных фотографий, выполнил сложнейшие баллистические расчеты по маневрированию и ориентации.
Так там 8-битный бортовой процессор и ..аж 8 кбайт памяти на все. И не завис за 30 лет.
Сейчас не каждый программист успеет на этом два светодиода зажечь.

Ладно, Вы имеете свою точку зрения на все проблемы, оставайтесь на ней.
Важно, что другие люди других предупредили. Кому-то это будет повод для размышлений.
Herz
Цитата(zombi @ Jun 25 2013, 00:57) *
Т.е программисту который полностью представляет все реально происходящие процессы WDT не нужен.


В период обучения азам встречал у Микрочипа очень красивый пример с использованием WDT для вполне реальной задачи. Просто для переключения светодиодов. Можно было бы решить "её в лоб", но это слишком банально. А было продемонстрировано, как изящно может её решить настоящий программист.
Сейчас лень искать.
ArtemKAD
Неужели в пять команд вместе с включением WDT wink.gif ?
stells
Цитата(Егоров @ Jun 25 2013, 07:49) *
После сеанса связи станция осталась ориентированной на Землю, бесконечно ждала сигнала "конец связи", который оператор просто забыл выдать. А гениальная программа не следила в это время за состоянием бортовых батарей. Они сели и станция замерзла.

так это значит не была предусмотрена защита от полного разряда... а так вообще-то станция должна постоянно передавать свою телеметрию
ArtemKAD
Она и передавала, но ушла за горизонт, а там принимать было некому.
zombi
Цитата(Егоров @ Jun 25 2013, 19:30) *
Так там 8-битный бортовой процессор и ..аж 8 кбайт памяти на все. И не завис за 30 лет.

Интересно, а есть ли в той системе WDT и если есть то сколько раз срабатывал за 30 лет?
ArtemKAD
Вообще-то срабатывание WDT для работы устройство должно быть мало заметно.
А в космической технике это переход в "безопасный режим" в который эта техника падает почти по каждому чиху. Без этого режима Пионер проходя через радиационные пояса Юпитера просто бы не выжил. А так отделался только потерей данных.
zombi
Цитата(ArtemKAD @ Jun 25 2013, 23:34) *
проходя через радиационные пояса

Опять радиация.
Согласен, влияние оной действительно предвидеть невозможно.

Получается что всё упирается только в радиацию? поскольку её влияние мы исключить полностью не можем нужно обязательно использовать WDT?

А что если эта самая радиация "убьёт" и WDT? Зависнем навсегда?
stells
Цитата(zombi @ Jun 26 2013, 01:14) *
Получается что всё упирается только в радиацию?

мы выпускаем радиометры для исследования урановых скважин, интенсивности попадаются до 20000мкР, применяю 8-битные AVR, WDT не использую
ArtemKAD
Цитата
Получается что всё упирается только в радиацию? поскольку её влияние мы исключить полностью не можем нужно обязательно использовать WDT?

Нет, Всё упирается в наличие человека. WDT обязателен если устройство должно работать продолжительное время без отключения и нажатия на кнопку Reset. Ну и конечно чем сложнее программа тем опаснее сбой - в простых программах сбои незаметнее.
zombi
Цитата(stells @ Jun 26 2013, 07:50) *
мы выпускаем радиометры для исследования урановых скважин, интенсивности попадаются до 20000мкР, применяю 8-битные AVR, WDT не использую

На чём пишете программы для этих радиометров?

Цитата(ArtemKAD @ Jun 26 2013, 08:38) *
... продолжительное время ... чем сложнее программа ...

очень растяжимые понятия
stells
Цитата(zombi @ Jun 26 2013, 10:36) *
На чём пишете программы для этих радиометров?

ассемблер... а какая разница?
ArtemKAD
Цитата
очень растяжимые понятия

Само собой расняжимые. Много от чего зависят. Чем чище и стабильнее питание и меньше воздействия радиации на камень, тем больше времени он может не сбоить. И т.к. процесс статистический, чем больше устройств выпущено, тем раньше можно заметить отсутствие WDT.
Потому и растяжимые.
Егоров
Цитата(stells @ Jun 25 2013, 21:45) *
так это значит не была предусмотрена защита от полного разряда... а так вообще-то станция должна постоянно передавать свою телеметрию

Ну да, так программист и считал. Пару спутников через плечо заглядывал как программируют.
А межпланетная станция летит, ориентируясь на Солнце. Только короткое время сеанса связи переориентируется остронаправленной антенной на Землю. Сбросила пакет телеметрии, получила команды и опять разворачивается батареями на Солнце.
Ошибочно были выстроены приоритеты прерываний и их маски. На время сеанса связи все прочее было замаскировано, чтобы не отвлекало.
А отвлечься на контроль питания стоило. Потеря сеанса связи - невелика беда, можно через пару часов попытаться еще. Потеря же питания привела к потере объекта.
Программа висела в бесконечном цикле ожидания, это был алгоритмический просчет, не предусмотрели такой ситуации. Сторожевой таймер тут бы выручил.
zombi
Цитата(stells @ Jun 26 2013, 09:42) *
ассемблер... а какая разница?

Я так и предполагал.

Как только начинаешь использовать подпрограммы,библиотеки написанные не самим тут уже без WDT никак это точно biggrin.gif

Цитата(Егоров @ Jun 26 2013, 14:16) *
... это был алгоритмический просчет, не предусмотрели такой ситуации. Сторожевой таймер тут бы выручил.

А если бы такую ситуацию предусмотрели то таймер был бы ненужен.

Цитата(ArtemKAD @ Jun 26 2013, 10:54) *
чем больше устройств выпущено, тем раньше можно заметить отсутствие WDT.

МКС вон единицы выпушено а отсутствие WDT уже заметно.

За двадцать лет мной разработано несколько десятков различных изделий на АТ90S,MEGA,XMEGA которые разошлись тиражами от сотни до десятков тысяч и ни в одном из них я никогда не использовал WDT.
Жалоб на какие либо зависания рабочих изделий небыло.
ArtemKAD
Странно. Особенно на AT90S. Разве что устройства не были автономными.

Цитата
МКС вон единицы выпушено а отсутствие WDT уже заметно.

А причем тут МКС?
Егоров
Цитата(zombi @ Jun 26 2013, 14:46) *
А если бы такую ситуацию предусмотрели то таймер был бы ненужен.

Да, конечно. Но тут я вспоминаю кадры старого фильма:
ПетрI: Продули битву почем зря...
Меншиков: Да, мингерц, продули-с... А вот если бы у нас была конница...
ПетрI: Так то ж если бы она была! Побеждать нужно уметь всегда!
Fujitser
Цитата(zombi @ Jun 21 2013, 21:34) *
Кроме как для сброса плохо написанной "зависшей" программы для чего ещё можно использовать?


Для сброса зависшего микроконтроллера с хорошо написанной программой? очевидно же.
Микроконтроллеры часто зависают при воздействии помех по питанию и т.п.
WDT должен использоваться обязательно, без вариантов.
zombi
Цитата(Fujitser @ Jun 27 2013, 17:00) *
Микроконтроллеры часто зависают при воздействии помех по питанию и т.п.
WDT должен использоваться обязательно, без вариантов.

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

Как предлагаете проверить WDT? (советы убрать wdr не принимаются).
_Артём_
Цитата(zombi @ Jun 27 2013, 19:01) *
Как предлагаете проверить WDT?


Просто проверить(wdr не убираем):
Код
void main()
{
  EnableWdt();
  while (1) {
    if (WdtResetEnable()) // например какая надо нога в соответствующем состоянии
      asm("wdr");
    else
      while (1);
  }
}

Если программа сбрасывается на >100500 МК значит WDT работает(при соответстующих условиях).


Цитата(zombi @ Jun 27 2013, 19:01) *
Разрешая работу любого узла мк я обязательно должен убедиться в его работоспособности.

Это как бы обязательно. Но первый кандидат, почему программа не работает - это ваша программа. Но узлы МК тоже могут работать не так как задумывалось их разработчиками (xmega тому хороший пример).
zombi
Цитата(_Артём_ @ Jun 27 2013, 21:50) *
Просто проверить(wdr не убираем):

Вы меня не поняли.
Разрешение/запрещение wdr путём опроса ноги или перекомпиляции проекта это не то.
Для полноценного теста работоспособности WDT и правильности расположения в программе команд wdr процессор должен именно подвиснуть и после этого сброситься именно от WDT.
Пишут : "часто зависают при воздействии помех по питанию и т.п."
Вот я и хочу как то воздействовать на питание или на т.п. с целью подвесить проц.
Как мне это сделать???



Цитата(_Артём_ @ Jun 27 2013, 21:50) *
Но первый кандидат, почему программа не работает - это ваша программа.

Разумеется.

Цитата(_Артём_ @ Jun 27 2013, 21:50) *
Но узлы МК тоже могут работать не так как задумывалось их разработчиками (xmega тому хороший пример).

Тогда я должен обязательно понять как оно работает/неработает, а без полного понимания этого писать программу просто не имеет смысла.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.