Может кто-нибудь объяснить, как работает загрузчик Arduino? Я не ищу здесь ответа на высокий уровень, я прочитал код, и я понял суть его.
Взаимодействие между протоколами между Arduino IDE и кодом загрузчика происходит в результате взаимодействия с протоколом, в результате чего получается ряд встроенных инструкций по сборке, которые самопрограммируют флэш-память с передачей программы через последовательный интерфейс.
То, что я не понимаю, находится в строке 270:
void (*app_start)(void) = 0x0000;
... который я распознаю как объявление и инициализацию NULL, указателя функции. Последующие вызовы app_start в местах, где загрузчик должен делегировать выполнение исполняемого пользователем кода.
Конечно, как-то app_start
нужно получить значение, отличное от NULL, в какой-то момент, чтобы все это собралось вместе. Я не вижу этого в коде загрузчика... это магически связано с программой, загружаемой загрузчиком? Я полагаю, что основная часть загрузчика является точкой входа в программное обеспечение после reset чипа.
Завершение в 70-ти строках сборки должно быть секретом секретного декодера, который сообщает основную программу, где действительно существует приложение_ app_start? Или, возможно, некоторые неявные знания используются в среде Arduino IDE? Все, что я знаю, это то, что если кто-то не изменит app_start, чтобы указать где-то, кроме 0, код загрузчика будет просто вращаться навсегда навсегда... так что трюк?
Edit
Мне интересно попытаться подключить загрузчик к Tiny AVR, который не имеет отдельного пространства памяти для кода загрузчика. Как мне становится очевидным, что код загрузчика зависит от определенных настроек плавких предохранителей и поддержки чипов, я думаю, что мне действительно интересно знать, что нужно, чтобы перегрузить загрузчик на чип, у которого нет этих предохранителей и аппаратных средств поддержка (но все еще имеет возможность самопрограммирования)?