ADAM5510 случаи зависания |
Ответить |
Автор | |
Участник Присоединился: 13 Май 2005 Online Status: Offline Публикации: 61 |
Опубликовано: 11 Май 2007 15:10 |
Здравствуйте.
В процессе эксплуатации контроллеров ADAM5510 периодически замечаю примерно раз в несколько месяцев происходит зависание контроллеров, приходится приезжать на удаленные рбъекты и нажимать Reset. WatchDog установлен на NMI, в его прерывании инкрементируется счетчик и вызывается общий сброс: int iCountWatch=0; void interrupt NMI(...) //по JP2 вызывается от WDT 1.6s { union REGS r; disable(); WDT_clear(); if(++iCountWatch>10){ Release_All(); int86(0x19, &r, &r); // heat reset } outport(0xff22,0x8ffc); enable(); } Экстремальных условий и помех особых нет. Хочется узнать причину такого поведения WatchDoga. |
|
Действительный член Присоединился: 14 Январь 2005 Категория: Russian Federation Online Status: Offline Публикации: 322 |
|
Какие модули стоят? Чего контроллеры делают? |
|
Сергей
|
|
Участник Присоединился: 13 Май 2005 Online Status: Offline Публикации: 61 |
|
Измерение параметров объекта, архивация и отправка данных. Стоят модули: A5017H, A5050, модем MC35, блок UPS.
|
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
Можно конечно пуститься в анализ ситуаций, при которых может виснуть система. То-ли на ветке вызова int19h (ведь вход в него получается с запрещенными аппаратными прерываниями - disable()). Или на прямой ветке, если при запрещенных прерываниях происходит непредсказуемый глюк ... и т.д. Но я не это хочу сказать. А есть бредовая идея - пусть этот самый WatchDog и "нажимает" Reset ! (через внешний сигнал). Во всяком случае, будет исключена ветка вызова печально известного int19, а NMI будет работать чисто на счетчик. Круг поиска резко сузится, и если произойдет очередное зависание, то будет совершенно ясно где оно произошло. С уважением, SAN |
|
Новичок Присоединился: 23 Июнь 2006 Категория: Belarus Online Status: Offline Публикации: 20 |
|
С ADAM5510 я не работал, т.е. код не до конца понимаю, но всё же. IMHO, в прерывании сбрасывать WatchDog - не лучшая идея. Запросто может возникнуть ситуация, когда ваш рабочий цикл зависнет (зациклится), а прерывания будут спокойно вызываться. Сброс WatchDog должен вызываться в рабочем цикле. |
|
Участник Присоединился: 13 Май 2005 Online Status: Offline Публикации: 61 |
|
Спасибо, действительно скорее всего WDT_clear() в прерывании не совсем правильно. Но всеже думаю просто отказаться от NMI ,перевести на Rest и посмотреть что будет дальше.
|
|
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |