Кто-нибудь может объяснить, как работает загрузчик Arduino ? Я не ищу здесь высокоуровневого ответа, я прочитал код и понял его суть.
Вот ' Это связка протокольного взаимодействия, которое происходит между IDE Arduino и кодом загрузчика, что в конечном итоге приводит к ряду встроенных инструкций сборки, которые самопрограммируют флеш-память с программой, передаваемой через последовательный интерфейс.
То, что мне непонятно, находится в строке 270:
void (*app_start)(void) = 0x0000;
... которую я распознаю как объявление и инициализацию NULL указателя функции. Последующие вызовы app_start выполняются в тех местах, где загрузчик предназначен для делегирования выполнения кода, загруженного пользователем.
Конечно, как-то app_start
нужно в какой-то момент получить значение, отличное от NULL, чтобы все это собралось вместе. Я не вижу этого в коде загрузчика ... это волшебно связано с программой, загружаемой загрузчиком? Предполагаю, что основная часть загрузчика - это точка входа в ПО после перезагрузки чипа.
Около 70 строк сборки должно быть заключено в секретное кольцо декодера, которое сообщает основной программе, где на самом деле находится app_start? Или, может быть, это какое-то неявное знание, используемое IDE Arduino? Все, что я знаю, это то, что если кто-то не изменит app_start так, чтобы он указывал где-нибудь, кроме 0, код загрузчика просто вращается сам по себе вечно ... так в чем же фокус?
Edit
Меня интересует попытка портируйте загрузчик на Tiny AVR, в котором нет отдельного места в памяти для кода загрузчика. Поскольку мне становится очевидным, что код загрузчика зависит от определенных настроек предохранителя и поддержки чипа, я думаю, что я
"Illegal use of -style tag without as its direct parent"
Разве вам не разрешено так глубоко вкладывать теги условий в JSTL?