Цитата(3.14 @ Apr 20 2007, 11:22)

1) говорм устройству что нужно обновить фирмварь, та во флешке сохраняет флажек PROGRAM, перезапускает контроллер
2) "базовая" версия при запуске смотрит состояние PROGRAM флага, если не активен, то тупо предает управление "рабочей" версии, если PROGRAM активен то ждет обновления прошивки потом сбрасывает PROGRAM и рестарт
Какую-либо неиспользуемую ногу (например приснопамятный SSEL с внешней подтяжкой) приложение настраивает на вывод и передает управление загрузчику. Загрузчик проверяет ногу - если настроена на ввод - значит это старт по включению питания, если на вывод - значит это вызов из приложения. Запись флажка во флеш при этом не требуется.
Цитата(zuy @ Apr 20 2007, 12:02)

В общем-то работает. Хотел узнать может есть какой другой, может более правильный вариант?
Запустить вочдог и дать ему сбросить процессор. Гарантированноо сбросится вся периферия и вы не будете иметь сюрпризов типа какую-то периферию уже настроил загрузчик а приложение об этом не знает и полагается на настройки по умолчанию.
Код
start_sect = floor(page/128) + first_sect;
Зачем тут плавающая точка? start_sect = page / 128 + first_sect;
Код
IENABLE;
while(Iap.status!=CMD_SUCCESS);
return TRUE;
Если предыдущий вызов IAP не удался, этот цикл будет крутиться вечно.