Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
31.10.2010, 01:02
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
|
Программный watchdog
Сторожевой таймер (watchdog timer) - внутренний или внешний модуль процессорной системы, который производит сброс процессора если от него не было сигналов в течении длительного времени (обычно несколько секунд). Эта технология хорошо описана, проста для понимания и отработана.
Я же хочу зайти немножко дальше, и помимо аппаратного сторожа использовать программный. Мне это видится так - в процессе работы программы периодически запускается контрольная мини-задача, выполняющая вычисления над некоторыми данными в памяти и самопроверяющая результат этих вычислений. Если проверка не проходит - перезапуск процессора. Таким образом проверяется "вменяемость" вычислений процессора и правильность данных в памяти и если что, производится перезапуск системы.
Есть у кого нибудь наработки в этой области? Какие есть простые алгоритмы, обладающие самопроверочной функцией?
__________________
.
В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
Последний раз редактировалось alexgap; 31.10.2010 в 01:04.
|
|
|
|
31.10.2010, 01:45
|
|
Заблокирован
Регистрация: 23.08.2010
Сообщений: 541
Сказал спасибо: 20
Сказали Спасибо 93 раз(а) в 78 сообщении(ях)
|
Re: Программный watchdog
Дык... для этого модули CRC в некоторых процах и существуют, ИМХО...
|
|
|
|
31.10.2010, 01:50
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
|
Re: Программный watchdog
Интересуют алгоритмы без привязки к конкретному процессору. Вот что-нибудь типа этого:
Код:
|
static byte W1 = 0;
static byte W2 = 1;
void Check()
{
++W1;
if (W1 != W2)
Reset();
++W2;
if (W2 != W1 + 1)
Reset();
} |
Где функция Check() вызывается, скажем, один раз в 100 миллисекунд.
Но то что я привел выше - примитив. Возможно у кого-то есть более продвинутые идеи.
__________________
.
В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
|
|
|
|
31.10.2010, 03:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: Программный watchdog
Т.е. программа сама себя проверяет. А смысл? Если произошёл сбой , вся ета проверка автоматически уходит коту под хвост. Если Озу слетело-то даже все вызовы подпрограмм(стек) уходит туда-же. Достоверности "0". Для этого и аппаратная часть , независимая, вводится.
|
|
|
Сказали "Спасибо" OlegNZH
|
|
|
31.10.2010, 04:17
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
|
Re: Программный watchdog
Сообщение от OlegNZH
|
Т.е. программа сама себя проверяет. А смысл?
|
Смысл есть, поверьте мне. Если сносит ОЗУ, то это будет с некоторой вероятностью определено и система уйдет в перезапуск.
По наблюдениям. Процессор живет на "затертом" ОЗУ некоторое время, отрабатывает прерывания даже при порченном стеке, но алгоритмическая часть конечно, сбоит, ибо значения переменных - мусор. Аппаратный сторожевой таймер эту ситуацию может не покрывать, так как прерывание срабатывает, собаке сообщения посылаются, для него все ок и система висит в таком состоянии сколь угодно долго, при этом еще может натворить каку, беспорядочно дергая пинами ориентируясь на значения переменных в ОЗУ, которое было затерто мусором.
Писать нотации о целесообразности я не рекомендую, ибо не за этим поднимал сей вопрос. Очевидно, что при введении дополнительных контролирующих механизмов отказоустойчивость системы повышается.
__________________
.
В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
|
|
|
|
31.10.2010, 07:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.09.2009
Сообщений: 1,899
Сказал спасибо: 470
Сказали Спасибо 408 раз(а) в 255 сообщении(ях)
|
Re: Программный watchdog
Для этого вроде есть метод "контроль четности". Суть такая: при записи в озу вычисляется контрольная сумма данных, двоичная сумма всех бит от которых потом отбрасывают старшие разряды и сохраняется вместе с данными в виде бита четности! При чтении данных из озу снова вычисляется контрольная сумма и биты четности сравниваются. Если они равны данные признаются как истинные.
__________________
Я бы изменил весь мир, но бог не дал исходников
|
|
|
|
31.10.2010, 08:48
|
|
Заблокирован
Регистрация: 08.08.2007
Сообщений: 2,843
Сказал спасибо: 378
Сказали Спасибо 1,368 раз(а) в 746 сообщении(ях)
|
Re: Программный watchdog
Если использовать прерывания. Другим независимым способом - никак. Прерывание может быть и внешним. По прерыванию вызываются подпрограммы, работающие с ячейками памяти, расположенными в разных областях памяти (и в которых помещены известные константы). Лучше, если будет несколько последовательных вызовов (цепочкой) этих подпрограмм. Для экономии места - рекурсией. Но этой штукой (рекурсией) никогда не пользовался.
При разрушении констант, результат будет отличаться от ожидаемого. При зависании (если стек разрушен) - сработает внешний WDT.
|
|
|
|
31.10.2010, 12:13
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,537
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
|
Re: Программный watchdog
Почитайте тему Самодиагностика PIC. Тесты по IEC 60730.
Последний раз редактировалось realid; 31.10.2010 в 12:16.
|
|
|
|
31.10.2010, 12:38
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
|
Re: Программный watchdog
realid, огромное спасибо! Там есть вся информация, плюс документы по имеющимся на эту тему стандартам с примерами реализации.
__________________
.
В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Программный сброс в мега под IAR
|
maxik_k42 |
Микроконтроллеры, АЦП, память и т.д |
10 |
13.09.2010 19:16 |
AVR Watchdog
|
alberio |
Микроконтроллеры, АЦП, память и т.д |
7 |
19.08.2010 14:26 |
Часовой пояс GMT +4, время: 05:25.
|
|