|
Неправильная работа Watch Dog Timer'a, WDT не работает |
|
|
|
Jun 19 2013, 11:50
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 19-12-08
Из: г.Северодонецк, Украина
Пользователь №: 42 608

|
Прошу помощи у Клуба!
Проблема в неправильной работе Watch Dog Timer'a на ATmega640-16AU. Суть в следующем: после запуска Watch Dog Timer'a в режиме "System Reset Mode" через запрограммированое (2 сек) время камень не перезапускается (System Reset), а тупо виснет. Проверку осуществляю при помощи вставленных циклов ожидания функции __delay_cycles().
Компилятор IAR EWB v.6.21.1. Прошивка в железо - AVReal. Инициализация в основной программе (main): // Инициализация Watchdog-таймера _WDR(); // Сброс Watchdog WDTCSR |= (1<<WDCE)|(1<<WDE); WDTCSR = (1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0); // Установка времени срабатывания ~2 с _SEI(); // Глобальное разрешение прерывания
Фьюз WDTON=1. Сама программа без WDT или с включённым WDT, но без принудительной сверхзадержки работает без проблем. Аналогичные варианты других программ, но на камнях ATmega64 с идентичными параметрами (инициализация, фьюзы, способы проверки срабатывания WDT) работают тоже без проблем.
|
|
|
|
|
 |
Ответов
|
Jun 27 2013, 10:34
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(zombi @ Jun 27 2013, 12:43)  Это ж бред. Вы сильно всё упростили. Выполнение некой функции занимает определенное время. Убрав вызов этой функции Вы измените временнЫе соотношения между наступлением неких событий. В коде присутствует некая ошибка, которая проявляется именно при наступлении определённых событий в неком, конкретном временнОм интервале. Меняя местами вызовы функций ТС изменяет эти временнЫе соотношения. На время тестирования устройства те самые "нехорошие" события разошлись во времени, но не факт, что через продолжительное время эти "нехорошие" события вновь не "сойдутся"... Так что, по большому счету, перестановка местами вызовов функций проблему не решает. И дело здесь, возможно, и не в инициализации LCD вовсе. Хотя и в такой "обсосанной" со всех старон теме, как инициализация LCD, ТС умудрился "накосячить"... Если у ТС LCD на HD44780, то "невооруженным взглядом" видны отклонения в коде от DS - они остались после исправлений с направлением передачи данных по шине данных. Вероятно, кроме LCD в изделии присутствуют и др компоненты, с которыми взаимодействует МК. Возможны "косяки" и при работе с ними... Заметил, что "баги" давольно "прочно" поселяются с частях программ, "кочующих" из проекта в проект годами. С трудом вериться, что в коде, "проверенном" не одним проектом, могут быть какие-то ошибки... Ан - могут ! Однажды я нашёл ошибку в коде "благополучно" применявшимся 10 лет ! Поиск в программе ошибок, связанных с временнЫм соотношением между наступлением неких событий - дело трудное и не предсказуемое по результату...
|
|
|
|
Сообщений в этой теме
SerSh Неправильная работа Watch Dog Timer'a Jun 19 2013, 11:50 Сергей Борщ QUOTE (SerSh @ Jun 19 2013, 14:50) WDTCSR... Jun 19 2013, 13:16 SerSh Убрал.
Стало:
// Инициализация Watchdog-таймера
... Jun 19 2013, 13:33 _Артём_ Цитата(SerSh @ Jun 19 2013, 16:33) Убрал.... Jun 19 2013, 13:40 Палыч Цитата(SerSh @ Jun 19 2013, 17:33) В рабо... Jun 19 2013, 13:48 SerSh К регистру MCUSR я вообще не обращаюсь.
Листинг ф... Jun 19 2013, 14:02 _Артём_ Цитата(SerSh @ Jun 19 2013, 17:02) Ещё од... Jun 19 2013, 14:11  SerSh Цитата(_Артём_ @ Jun 19 2013, 17:11) Возм... Jun 19 2013, 14:12   _Артём_ Цитата(SerSh @ Jun 19 2013, 17:12) И когд... Jun 19 2013, 14:19   SerSh Цитата(SerSh @ Jun 19 2013, 17:12) И когд... Jun 19 2013, 14:20 Палыч Цитата(SerSh @ Jun 19 2013, 18:02) Тогда ... Jun 19 2013, 15:07  SerSh Цитата(Палыч @ Jun 19 2013, 18:07) WDT бе... Jun 19 2013, 15:51   Палыч Цитата(SerSh @ Jun 19 2013, 19:51) Кажетс... Jun 19 2013, 16:43    SerSh Цитата(Палыч @ Jun 19 2013, 19:43) Кажетс... Jun 19 2013, 20:45 SerSh Закомментировал все команды WDR, но всё осталось п... Jun 20 2013, 06:15 Палыч Цитата(SerSh @ Jun 20 2013, 10:15) Закомм... Jun 20 2013, 06:49  SerSh Цитата(Палыч @ Jun 20 2013, 09:49) Остало... Jun 20 2013, 06:55 Сергей Борщ Заодно фуз BOOTRST проверьте Jun 20 2013, 07:30 SerSh Цитата(Сергей Борщ @ Jun 20 2013, 10:30) ... Jun 20 2013, 07:54 SerSh Неожиданное продолжение.
Стал возвращать в програм... Jun 26 2013, 07:08 Палыч Цитата(SerSh @ Jun 26 2013, 11:08) Не буд... Jun 26 2013, 07:40  SerSh Цитата(Палыч @ Jun 26 2013, 10:40) Информ... Jun 26 2013, 08:00   Палыч Цитата(SerSh @ Jun 26 2013, 12:00) ... фу... Jun 26 2013, 09:59    SerSh Цитата(Палыч @ Jun 26 2013, 12:59) Не уви... Jun 26 2013, 10:44     Палыч Беглый анализ кода показал: таки возможно встречно... Jun 26 2013, 11:32      SerSh Цитата(Палыч @ Jun 26 2013, 14:32) Беглый... Jun 26 2013, 11:44 zombi Цитата(SerSh @ Jun 26 2013, 10:08) пришёл... Jun 26 2013, 21:28  SerSh Цитата(zombi @ Jun 27 2013, 00:28) Если в... Jun 27 2013, 08:24 SerSh К сожалению, хороших результатов нет.
Установка... Jun 26 2013, 12:59 Палыч Цитата(SerSh @ Jun 26 2013, 16:59) теперь... Jun 26 2013, 13:12  SerSh Цитата(Палыч @ Jun 26 2013, 16:12) Надеюс... Jun 26 2013, 13:35 SerSh Цитата(zombi @ Jun 27 2013, 11:43) Это ж ... Jun 27 2013, 19:21  Палыч Цитата(SerSh @ Jun 27 2013, 23:21) Что се... Jun 28 2013, 05:51 zombi У Вас SEI сразу после инита WDT и затем еще какие ... Jun 27 2013, 20:36 berberber Та же песня!
ATMega88 после интервала для сра... Apr 1 2015, 10:56 Сергей Борщ Цитата(berberber @ Apr 1 2015, 12:56) Дум... Apr 1 2015, 11:22  demiurg1978 ТС, вам нужно сделать переменную в ОЗУ. И придумыв... Apr 1 2015, 16:06 berberber Цитата(Сергей Борщ @ Apr 1 2015, 14:22) я... Apr 2 2015, 08:47 Сергей Борщ Цитата(berberber @ Apr 2 2015, 10:47) Ком... Apr 2 2015, 09:03 demiurg1978 Цитата(berberber @ Apr 2 2015, 14:47) Про... Apr 2 2015, 10:14
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|