Извините за длинное вступление, но оно помогает объяснить контекст вопроса.
Я пытался понять больше о том, как работают умные часы, чтобы написать для них собственную прошивку, прочитав код, похожий на arduino, который был размещен на github. Я заметил, что во всех примерах в функции loop()
есть следующий код:
if(digitalRead(BUTTON)) standardShutdown();
Эта линия, по-видимому, отслеживает кнопку питания и, если она нажата, выключает часы. Однако это вызывает беспокойство. Цепочка загрузки как я понял пока такая: при включении часы начинают выполнять код загрузчика по адресу 0x08000000. Если USB подключен и пользователь нажимает кнопку в течение одной секунды, он входит в режим dfu и позволяет загрузить новую прошивку. В противном случае запускается код пользователя, который находится по адресу 0x08040000.
Что произойдет, если из-за ошибки программиста код войдет в бесконечный цикл и никогда не будет проверять кнопку питания или выключение? Есть ли способ принудительно перезагрузить часы (например, удерживая кнопку питания в течение пяти секунд, подключив USB-кабель с нажатой кнопкой или что-то в этом роде), чтобы снова запустить загрузчик и загрузить новую прошивку? Если нет, будет ли ошибка, вызывающая бесконечный цикл, навсегда заблокировать часы?
Обычно я бы просто попробовал и посмотрел, что произойдет, но я не хочу ломать свои часы, поэтому и спрашиваю здесь.