FLProg
Вход на сайт
Логин:
Пароль:
Поиск
...
Статистика
Понедельник, 11.12.2017, 12:28
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: support, Сергей, Anydy, Олег 
Форум » Основной » Железо - контроллеры, шилды, датчики и др. » Контроллеры » Сторожевой таймер. Хард сброс контроллера из FLProg (Перезагрузка МК с использованием аппаратного таймера.)
Сторожевой таймер. Хард сброс контроллера из FLProg
Сергей Дата: Понедельник, 20.11.2017, 16:38 | Сообщение # 1
Модератор
Группа: Администраторы
Сообщений: 530
Награды: 17
Репутация: 7
Статус: Offline
Доброго дня всем. После запуска очередного устройства в эксплуатацию, обнаружились зависания контроллера. Как обычно во общем...
Задался я вопросом аппаратного сторожевого таймера (Watchdog/ватчдог-по нашему).
В ATMEL-ах он реализован аппаратно. В нашей FLProg автор его реализовал программно.
То есть...
Есть два способа ресетить контроллер без участия рук. 
 "Железный" - подача сигнала сброса на вывод Res контроллера, руками либо внешней схемой сброса.
1. Аппаратный - сигнал сброса подает встроенный сторожевой таймер. Этот сброс аналогичный "железному".
2. Программный (софтовый) - это программный переход выполнения программы на 0-вой адрес, т. е. на начальный адрес программы. В принципе, это тоже полезная вещь, но с помощью нее невозможно перегрузить зависший контроллер Ethernet или взглюкнувший LCD.
Пример реализации программного сброса в FLProg

В самом низу мы видим ассемблерную команду  jmp 0x0000. Это запись в программный счетчик значения 0, таким образом МЦУ следующей командой выполнит ту, что находится в начале программы. Так осуществляется программный сброс перезапуск контроллера. 
Помимо нецелесообразности реализации программного сброса, когда "на борту" есть аппаратные средства, программный сброс еще отнимает ресурсы МК, а именно таймер/счетчик (в нашем примере под номером 2).

В FLProg реализован программный сброс. Почему?
Дело в том, что после перезагрузки, которая была вызвана watchdog, контроллеры последних выпусков оставляют включенным watchdog на минимальный период, т.е. 15ms. Это нужно для того, чтобы программа как-то узнавала, что предыдущая перезагрузка была по watchdog. Поэтому первоочередная задача загрузчика (или вашей программы, если она запускается первой) — сохранить информацию о том, что перезагрузка была «неожиданной» и сразу же выключить watchdog. Если этого не сделать, то система уйдет в bootloop, т.е. будет вечно перегружаться.

Как известно, в Arduino есть специальный загрузчик, который выполняется в первую очередь после перезагрузки системы. И, к огромному сожалению, стандартный загрузчик не сбрасывает watchdog! Таким образом, система заходит в жестокий bootloop (состояние «crazy led», при котором светодиод на 13-м пине мигает как сумасшедший).
Прикрепления: 8440440.jpg(26Kb)


Выгодные покупки на AliExpress в Cashback ePN! Возврат до 12 % от стоимости ЛЮБОГО товара!
 
Сергей Дата: Понедельник, 20.11.2017, 16:49 | Сообщение # 2
Модератор
Группа: Администраторы
Сообщений: 530
Награды: 17
Репутация: 7
Статус: Offline
Продолжим...
Определим есть ли в бутлоадере вашей платы правильная остановка Watchdoga, последующий его сброс и запуск.
Загружаем скетч


включаем монитор:
Watchdog не поддерживается загрузчиком:


Watchdog поддерживается загрузчиком:


Anydy: Если у вас в таком случае МК ущел в бесконечный цикл, то тут либо ловить кнопкой ресет для загрузки нового скетча, либо с помощью прогромматора(другой ардуинки) перешивать! Учтите этот момент!
Прикрепления: 7819738.jpg(23Kb) · 1047385.jpg(27Kb)


Выгодные покупки на AliExpress в Cashback ePN! Возврат до 12 % от стоимости ЛЮБОГО товара!
 
Сергей Дата: Понедельник, 20.11.2017, 17:12 | Сообщение # 3
Модератор
Группа: Администраторы
Сообщений: 530
Награды: 17
Репутация: 7
Статус: Offline
Если ваша плата ушла в bootloop, то надо загрузить новый загрузчик. Opiboot кажется называется... Как грузить и где брать советую обратится к mr. Яндексу. Одна из статей по этой теме по ссылке. Скетч для проверки и картинки я от туда потянул. Спасибо Dremkin.
Если плата работает правильно, то берите на тест мои блоки. Один просто в проект добавляете. Команда сброса ватчдога будет в начале основного цикла программы (функции loop).
Второй, со входом WDT_res. Сбрасывает сторожевой таймер по переднему фронту импульса на этом входе. Если этот вход не "дергать", то через 8 с, контроллер перезагрузится.

На случай, когда с ардуинкой на пару работает например Ethernet модуль... Который иногда зависает... Ни программный ни аппаратный сброс может не помочь, т. к. ардуинка будет работать и причин для сброса не будет. То же самое у меня наблюдается с СИМ800. Когда я СМСками "вешаю" ардуинку и ничего не могу поделать пока не приеду и не нажму кнопку ресет. При этом сам модуль в сети. Теперь я по ответам модуля о уровне сети, буду сбрасывать ватчдог. А когда ардуина зависнет, с GSM модулем перестанет общатся, тогда и перестанет ватчдог сбрасывать и перезагрузится аппаратно!
Прикрепления: _WDT-CODE-.ubi(9Kb) · _WDT__-CODE-.ubi(15Kb) · 0975451.jpg(8Kb)


Выгодные покупки на AliExpress в Cashback ePN! Возврат до 12 % от стоимости ЛЮБОГО товара!
 
Anydy Дата: Понедельник, 20.11.2017, 17:16 | Сообщение # 4
Генерал-лейтенант
Группа: Администраторы
Сообщений: 714
Награды: 15
Репутация: 10
Статус: Offline
Почему то UNO  поддерживает включение собачки "из коробки" но не уверен что все
Для других МК нужно перешивать загрузчик - Optiboot
Если нужно, то создам инструкцию как это сделать, хотя их в инете и так полно!
И Даже аппаратный Watchdog в ардуино не спасет от зависаний(может ошибаюсь?)! Только внешний железный!


blynk.su
 
Сергей Дата: Понедельник, 20.11.2017, 18:23 | Сообщение # 5
Модератор
Группа: Администраторы
Сообщений: 530
Награды: 17
Репутация: 7
Статус: Offline
Anydy, думаю разжеванная инструкция не помешает. А то некоторые жалуются  biggrin
Цитата whitevip ()
Dev1, тут нет коров, вот имено Вы подметили из нормального форума сделали ненармальный сами же Вы гуру. Сколько я замечаю да и на себе к Вам люди просятся за помощью Вы сразу ему грубите и начинаете придератся и умничать, как он пишит и его граматику обсуждать, но ведь форум не про это.

Anydy, автор статьи пишет что для меги2560 загрузчик отличается от УНОвского... Если есть возможность напишите подробную статью в этой или новой теме по платам, с прикрепленными файлами. Будем тестить.

Цитата Anydy ()
И Даже аппаратный Watchdog в ардуино не спасет от зависаний(может ошибаюсь?)!
Смотря как зависнет. Если совсем намертво с остановкой тактового генератора, то "собака" спасет. Тут вопрос в том где в программе расставлены команды сброса собаки. К примеру, в основном цикле loop, стоит сброс WDT, а в какой нить подпрограмме! обработки прерываний ошибка программиста или выгорел порт МК или еще чего, эта подпрограмма неправильно отрабатывает, а в основном цикле дальше продолжает обнуляться WDT. Со стороны устройство покажется зависшим, а по факту будет работать. К примеру зависший Ethernet. Контролер то работает, а в ОПС сервер данные не передает - значит свои функции не выполняет и пользователю все равно завис МК или нет, когда надо полюбому идти жать кнопку ресет. Или наоборот подпрограмма обработки чего либо (напр. ответа от GSM модуля) слишком долго зациклена в ожидании ответа и МК сам перегружается. Т. о. в местах, где контроллер может долго выполнять кусок кода, необходимо вставлять команду сброса WDT.
Безусловно внешний сброс самый надежный. За ним аппаратный, а для "школьников" программный) как самый простой и не надежный. Т. к. программа может выполнятся и обнулять счетчик, а устройство в это время не выполнять свои функциональные обязанности. Тут пользователям необходимо выяснять что именно не работает, алгоритм или контроллер.


Выгодные покупки на AliExpress в Cashback ePN! Возврат до 12 % от стоимости ЛЮБОГО товара!
 
Nikan Дата: Понедельник, 20.11.2017, 18:33 | Сообщение # 6
Генерал-майор
Группа: Проверенные
Сообщений: 462
Награды: 13
Репутация: 11
Статус: Offline
Цитата Сергей ()
То же самое у меня наблюдается с СИМ800.
такая же фигня  м590 -модуль кажет что в сети, основнаяя прога выполняется но связи нема.
решил циклической перезагрузкой( раз в 6 часов полный прграммый сброс) + есть аппаратный внешний
 
Форум » Основной » Железо - контроллеры, шилды, датчики и др. » Контроллеры » Сторожевой таймер. Хард сброс контроллера из FLProg (Перезагрузка МК с использованием аппаратного таймера.)
Страница 1 из 11
Поиск:

FLProg © 2017
Яндекс.Метрика