Здесь так много задавалось вопросов по реализации загрузчика, поэтому я решил выложить свой вариант для AT91SAM7S64.
Ограничения:
1. Компьютерная управляющая программа заточена исключительно под этот кристалл.
2. Контроллер при старте сразу попадает в загрузчик и сидит в нем пока не получит команды запуска приложения от компьютерной управляющей программы.
3. Ваше приложение, исполняемое во FLASH, должно начинаться с адреса 0х1800.
4. Приложение, исполняемое в ОЗУ не должно использовать адреса начиная с 0х2C00 и до вершины ОЗУ.
5. Для того, чтобы загрузчик смог корректно перейти к выполнению вашего приложения из ОЗУ в ваш проект должен быть обязательно включен файл Start_RAM.s79 из папки моего ИАРовского проекта.
6.В вашем файле .xcl должна быть обязательно описана секция
Код
//*****************************************
// My_SEGMENT
//
//*****************************************
-Z(CODE)MY_FUNC=0200-022F
Это если вы планируете отладку приложения в ОЗУ.
7.В вашем приложении во FLASH по адресам 0х1818 и 0х181С (прерывания IRQ и FIQ должны) должны быть команды
Код
ldr PC, [PC, #-0xF20]
. Для ОЗУ стартап может быть каким угодно.
Вроде ничего не забыл.
Может этот пример избавит многих от лишних вопросов по этому поводу.
Критика приветствуется.
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.