Цитата(SpiritDance @ Apr 20 2007, 08:52)

Итак цель - бутром записывающийся в конец флеш, для бутрома нужны прерывания, для того чтобы его собственная таблица векторов не затиралась приложением нужно также хранить ее в конце флеша, при старте переписывать в RAM и делать remap, при выходе из загрузчика делать remap обратно на флеш.
Системная ошибка. Загрузчик вместе со своими векторами живет в начале ФЛЕША, а пользовательское приложение работает в ремапе. Этим мы гарантируем, что при любом слете в процессе перезаписи проц будет в состоянии стартануть и попасть хотя бы в загрузчик.
Цитата(SpiritDance @ Apr 20 2007, 08:52)

Так вот как это грамотно сделать в IARе? может есть где проект под IAR с ремапом а?
Вот рыба. проект состоит из двух - загрузчика и приложения.
Действия загрузчика -
1) инициализация ноги PIO принудительного старта загрузчика и PLL.
2) проверка был ли это старт из приложения, если да - запуск собственно загрузчика.
3) проверка был ли сигнал принудительного старта, если да - запуск собственно загрузчика.
4) проверка КС приложения. Если не совпала - запуск загрузчика.
4a) Если совпала - копирование векторов приложения в ОЗУ, ремап, переход на вектор сброса (старт приложения).
---- действия 1-4 происходят в __low_level_init() ----
5) собственно загрузчик. Сброс периферии, проверка был ли это вызов из приложения, если нет - ждать команду начала прошивки. Если из периферии - пропустить ожидание команды, команда была получена приложением.
6) собственно прошивка - допишите во вкусу
7) рестарт. После рестарта снова попадем в загрузчик, он проверит КС и т.д.
Для приложения даю файл линкера. Единственное, что требуется от приложения - не трогать ремап.
В остальном-обычная программа, правда слинкованная в новые адреса. Там же пример старта загрузчика по получению команды апдейта прошивки.
В общем несколько сумбурно, но работает. Выдрал из проекта, если что - спрашивайте. Будет интерес - сделаю законченный проект -шаблон, но не сегодня.