Цитата(defunct @ Feb 6 2009, 01:39)

Как-то закручено и неестественно получается.
Почему бы просто не выставить фуз BOOTRST, а вектора переключать в BOOT секцию с помощью бита IVSEL. Получатся два абсолютно независимых проекта.
Из BOOT'а в основную программу переходить - jmp 0x0, наоборот (из USER в BOOT) - по WDT сбросу.
Сигналить из основной программы бутлоадеру о наличии обновленной прошивки через оговоренную ячейку EEPROM.
>Как-то закручено и неестественно получается....
>фуз BOOTRST
Вот те раз - закручено, а по-моему так прще простого.
Я же написал: Старт кристалла на BootLoader - это и подразумевает установку BOOTRST.
А вот где держать вектора: здесь понятно 2 варианта в USER секции или Boot секциии,
если нет иасходников на USER а только hex файл прошивки, тогда ес-но в Boot, если же есть исходники,
то можно и в USER (выгадываем на каждом вызове прерывания время на лишний jmp).
В конце концов USER инициализируется после BootLoader - он решит где их размещать.
Но не делать же 2 вариана Boot - так получится один унмверсальный. Преимущество моего способа
в том, что USER не обязан знать о существовании BootLoader-a кроме выделения для него нескольких
адресов RAM (это можно делать в файле конфига линкера), кроме того не требуется лишних pin-ов
на кристалле для определения "куда стартовать"
>Из BOOT'а в основную программу переходить - jmp 0x0, наоборот (из USER в BOOT) - по WDT сбросу.
Можно и так, если конечно USER сам знает когда делать обновление, хотя можно обойтись и jmp на старт Boot
Если же все идет от оператора то переход из USER в BOOT см. мой порст выше - по рывку за USART!!!
>Сигналить из основной программы бутлоадеру о наличии обновленной прошивки через оговоренную ячейку EEPROM.
А вот это ради Бога - я же написал "тут дело техники и Вашей фантазии"
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция