bash.im ithappens.me zadolba.li
2431

Пока не пошатнутся истины

Пишу прошивку для микроконтроллера. Понадобилось обеспечить полную перезагрузку после определённой команды в терминале, чтобы удалённо можно было железку с микроконтроллером «отресетить», да ещё и минимумом команд обойтись — память у контроллера не резиновая.

Читаю мануал к компилятору. Есть функция программной перезагрузки. Работает, только если у программы один поток, а у меня три — не подходит. Есть функция аппаратной перезагрузки. Нужно выделять ножку ввода-вывода на контроллере и цеплять её к линии сброса контроллера. Не пойдёт: схему менять уже нельзя, да и ног свободных уже нема. А потом вспомнил: у меня же используется встроенная в микроконтроллер защита от повисания (мало ли что) — если две секунды сторожевой счётчик не сбрасывается, то самоперезагрузка обеспечена.

Цикл while true do begin end в итоге решил всё дело. Уложился в 18 байт машинного кода вместе с обработкой команды.