Создавая устройства, которые преимущественно должны работать автономно довольно долгое время без наблюдения, и от которых зависит жизнь и благополучие растений а то и животных, поневоле задумался о надежности и стабильности, в тех рамках в которых можно применить эти понятия к Ардуино. Итак, в процессорах AVR уже имеется возможность следить за работоспособностью самого себя, но, к сожалению, работает она далеко на всех платах. Исправить ситуацию, теоретически, можно, но мне этот способ показался адским (хотя может быть и зря). Первое что пришло в голову при мысли как обеспечить стабильность - тандем. То есть в проекте работает не одна плата, а две, благо их стоимость позволят не разориться. При чем вторая плата нужна именно для контроля работы первой. Ее задача - изредка посылать импульсы на первую (в пины с аппаратными прерываниями, например) и дожидаться ответных импульсов. Если их нет, хардово резетить свою подопечную. Для усугубления надежности первая так же может пинговать вторую и резетить ее. Разумеется, придется пожертвовать парой-тройкой пинов, но если страх перед зависанием силен, то оно того стоит. В реализации такой идеи, на первый взгляд, ничего сложного не вижу. Может я не прав? Какие есть способы лучше?
Уж лучше адский способ, как вы его назвали, чем ставить второй МК. Потому как перешить загрузчик совершенно не сложно, в статье много написано, а действий по сути чуть-чуть. Купить программатор за 150 р. (на ебэй), скачать оптибут, немножко поковыряться в файле board.txt и после этого можно прошивать загрузчик. По крайней мере - мне так кажется. "Не стоит плодить сущности без нужды. )" (с).
Не пробовал, да придется поковыряться в прошивках и коде. Если задаться целью, то задача выполнимая, к тому же на просторах сети, можно найти множество упоминаний о watchdog arduino. Зачем городить огород, если watchdog в arduino так подробно описан. Такой подход наверно будет полезен, если Вы хотите получать извещения о перезагрузке. Хотя возможно эта возможность есть в самом watchdog прерывание если не ошибаюсь у него должно быть. Можно просто увеличивать в setup, переменную которая хранится в EEPROM, значение переменной будет кол-во запусков. И отправлять ее куда-то при увеличение. Я любитель и не понимаю, зачем он вообще нужен. И за чего, программа должна упасть, из-за некорректно написанной программы и до конца не оттестированной, из-за наводок. А что даст данная перезагрузка в таком случае, наводки останутся, ошибка в коде тоже? Может лучше подумать о возможности отладки/тестировании ардуино, к слову есть варианты которые не ограничиваются Serial. Конкретные примеры - http://habrahabr.ru/post/216029/, http://blog.radiotech.kz/blog/arduino/69.html (сам задумался о таком варианте). Высказывал, лишь свою точку зрения. Возможно есть какие-то причины зависания не связанные с кодом, наводками с которыми пока не сталкивался, где watchdog уместен. Если так, буду благодарен, если упомянете их, чтобы разобрался в них и если надо взял на вооружение watchdog.
Рассмотрим реальный пример с космическим аппаратом LightSail. http://geektimes.ru/post/251250/ Из-за ошибки в программе система "зависла", и связь с КА была потеряна. Поскольку про watchdog процессора разработчики забыли, то им пришлось уповать на watchdog космический, т.е. ждать, пока не пролетит элементарная частица с высокой энергией и не вызовет рестарт процессора. Т.е. в реальной жизни watchdog очень полезен для автономно работающих штук, которые могут "зависнуть" по любой причине: от ошибки в программе до неблагоприятного внешнего воздействия (молния рядом шарахнула, но не настолько близко, чтобы сжечь). Понятно, что если причина зависания не устраняется ресетом хотя бы на некоторое время, достаточно длительное для выполнения некоторой полезной работы, то watchdog не поможет, но в большинстве случаев он будет работать как надо. Кстати, существует ли "адский" способ для леонардоподобных плат? Что-то никак не найду рабочий загрузчик, поддерживающий watchdog, а препарировать исходники пока не хватает времени.
Даже ничего качать/менять не нужно, оптибут прошивается по умолчанию, в последней версии IDE стоит последний, и он поддерживает watchdog
Возможно один раз пройдя, способ не покажется настолько уж адским, но пока мне он видится не совсем удобным. Даже тестовая программа в качестве результата окирпичивает процессор. А в чем сложность установки второго МК? Он стоит 300+ руб (даже не на ебее). И на него можно еще задач навесить, пусть работают оба.
Что значит окирпичивает? Там же специально введена задержка! Мало 5сек? Так укажите 10, тогда уж точно успеете залить какой-нибудь Blink, пока МК не ушел в bootloop.
-Watchdog действительно полезная штука и зачем городить огород из цепочки дополнительных мк которые также могут зависнуть. Вот тут как перепрошить чтобы работал Watchdog Для меги /328 /8 /16 -максимальная задержка 2 секунды, но и их хватает за глаза.
Так я эту статью в первом сообщении привел для примера. Пока я это МК не прошивал, мне немного боязно, возможно что пришло время заняться этим. Вопрос такой, если ли разница в бутлоадере от оригинальной Про Мини и ее копии? Обвязка никак на это не влияет?
Для вялотекущих процессов 8 сек - это слишком мало и слишком быстро. Например для тех же растений период срабатывания может исчисляться часами и писать каждые 8 секунд настройки и значения во флеш или на SD думаю слишком расточительно и бессмысленно. Вариант с 2 контроллерами хорош для более серьезной техники. Уж проще сделать долгопериодичный таймер на чем ни будь из серии "лопатой не убьешь" типа NE555.
Ну если отказаться от ардуино , и взять просто контроллер например мега328 и прошить его через ардуино ISP тем же скетчем, что ты напишешь в ардуиноIDE. Все будет работать на раз. Если копия нормально работает- проблем не должно быть никаких.