Цитата(Kolia @ Feb 7 2007, 14:13)

Люди!!!
Подскажите как лучше написать bootloader для Cygnala или вообще для 51 контроллера.
В общем меня интересуют следующие вопросы:
- где в пространстве программ лучше расположить bootloader и сам загружаемый код?
- как поступить с прерываниями - нужно ли их переопределять?
Может у кого есть готовый рабочий код - поделитесь пожаййсто.

Нижние 0x1000 байт ПЗУ проц-а отводятся под сам bootloader. При подаче питания bootloader инициализирует timer и UART на определённую скорость приёма-передачи (например 9600) и ждёт команды с PC "начать работать" (например нажатие клавиши "пробел" на PC) определённое время (3 сек). Если такая команда приходит bootloader продолжает работать (выдает меню, типа: 1-Сбросить flash, 2-Начать загрузку HEX-файла, 3-Выход). Если нет - заканчивает свою работу (программа переходит на адрес 0x1000 ПЗУ).
Для работы с bootloader-ом по выше описанной схеме на PC предварительно необходимо открыть соответствующий COM порт (программа HyperTerminal) на соответствующей bootloader-у скорости (в нашем примере 9600). После входа в bootloader и выбора пункта "Начать загрузку HEX-файла" для загрузки HEX-файла выбрать в меню HyperTerminal-а "передача" пункт "отправить текстовый фаил" и соответствующий HEX-фаил. Дождавшись от bootloader-а сообщения "Загрузка закончена", пересбросить девайс и на этот раз не подавать команды процу войти в bootloader.
Расположение bootloader-а по адресам 0-0x1000 ПЗУ позволяет в случае неудачной "зашивки" не потерять контроль над проц-ом и повторить попытку.