• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Скандалы, сплетни, расследования

JustACat

Moderator
Команда форума
Andy Korg, а чего звиняться, у нас тут болтовня :) Все приветствуется.
Я остановился на загрузчике optiboot, а у него там свое хитрое использование собаки. В частности, если перезагрузка модуля по собаке происходит, то загрузчик (определяя это) сразу запускает основную прошивку, пропуская выполнения функций загрузчика. В итоге, если собаку тут использовать именно для попадания в загрузчик (вообще, или из-за кривости прошивки), то перепрошить АВРку все равно не выйдет :)
Можно:
а) поискать другой загрузчик
б) модифицировать этот
в) использовать железный reset (что меня лично не смущает вообще, поэтому я пока что на этом остановился)
 

Andy Korg

Moderator
Команда форума
то загрузчик (определяя это) сразу запускает основную прошивку, пропуская выполнения функций загрузчика
Че-то не очень на мой взгляд. Конечно задачи разные бывают, но если уже загрузчик есть, то его отключение на мой неискушенный взгляд должен он делать сам.
 

JustACat

Moderator
Команда форума
Andy Korg, так так и есть, я вроде так и написал (может криво конечно написал, устал уже сегодня) :)
Загрузчик, запускаясь, проверяет регистр, в котором хранится информация о том, по какой причине произошла перезагрузка.
И функции именно перепрошивки подключает только, если перезагрузка произошла железная (через Reset или отключение питания).
А если же перезагрузка произошла по причине, например, сработавшей собаки, то загрузчик функции перепрошивки пропускает, сразу передавая управление программе пользователя.
Я не помню точно, почему у них там именно так сделано, но я пробовал это изменить (отключить, и вообще все поломал), потом выяснил. зачем оно так, и смирился. А сейчас уже и не помню, зачем оно так :)
Update: а чего я все на пальцах, вот исходник: https://github.com/Optiboot/optiboot/blob/master/optiboot/bootloaders/optiboot/optiboot.c#L443 - как раз с 443 строки идет по поводу запуска и на 451 это самое условие, которое запускает сразу прошивку пользователя, если сброс по WDT.
И зачем это сделано, сразу вспомнил, взглянув на код: https://github.com/Optiboot/optiboot/blob/master/optiboot/bootloaders/optiboot/optiboot.c#L491 - там в самом загрузчике используется вылет по WDT из цикла бесконечного :) То есть WDT там используется вместо таймера, ожидающего начало прошивки. Вроде как это для оптимизации у них там, ибо optiboot этот один из самых мелких в итоге выходит.
 
Сверху Снизу