Архив рубрики: Лаборатория

Software RAID5

Всем привет. Это короткая заметка-шпаргалка, оставленная для того, чтобы в случае аварии обратиться к ней. Во время написания все команды выполнялись на «живом» массиве в спокойной обстановке.

Читать далее

Arduino, watchdog, bootloop и прошивка загрузчика optiboot

Watchdog

Watchdog

Как вам может быть известно, Arduino (а вернее, микроконтроллер на плате) поддерживает watchdog (сторожевой таймер) который позволяет установить промежуток времени, через который микроконтроллер будет перезагружен, даже если программа зависнет. При этом, сторожевой таймер может быть сброшен программно. Схема работы примерно следующая: «взодим» таймер на некоторое количество секунд, а далее в основной программе постоянно обнуляем счётчик, если всё идёт нормально. Как только мы перестанем обнулять счётчик (а это и может означать зависание), контроллер автоматически перезагрузится по истечению заданного времени. Однако, работа с watchdog должна поддерживаться загрузчиком платы. Дело в том, что после перезагрузки, которая была вызвана watchdog, контроллеры последних выпусков оставляют включенным сторожевой таймер на минимальный период, т.е. 15ms. Это нужно для того, чтобы была возможность внутри программы узнать, что перезагрузка была по watchdog.Поэтому первоочередная задача загрузчика — сохранить информацию о том, что перезагрузка была «неожиданной» и сразу же выключить сторожа. Если этого не сделать, то система уйдет в bootloop, т.е. будет вечно перегружаться. Как известно, в Arduino есть специальный загрузчик, который выполняется в первую очередь после перезагрузки системы. И, к огромному сожалению, стандартный загрузчик не сбрасывает watchdog! Таким образом, система заходит в жестокий bootloop (состояние «crazy led», при котором светодиод на 13-м пине мигает как сумасшедший). Из статьи вы узнаете, как проверить загрузчик своей платы на поддержку watchdog и что делать, если он не поддерживается.

Читать далее