ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
1 июля
158070 Топик полностью
Сергей Борщ (01.06.2009 12:10, просмотров: 162) ответил Nataly на Я программирую микроконтроллеры PHILIPS типа LPC21XX и LPC22XX в Keil 3.0 . Загружаю сначала свою программу фирменным UART-загрузчиком (при этом фирменный загрузчик в процессоре, судя по описанию LPC, сидит очень далеко в памяти и недоступен скорее
Мне кажется, вы все-же двигаетесь не в том направлении. Для начала: Загрузчик и Приложение должны быть совершенно независимыми проектами. Загрузчик должен находиться в нулевом секторе (ну, если не влезет - то и в последующих). Он программируется в нулевой сектор при производстве изделия и защищается от стирания битами защиты. Загрузчик стартует при включении питания, проверяет целостность приложения (каким конкретно образом - решать вам, обычно идет подсчет CRC) и если приложение цело - запускает его. Если приложение порушено или отсутствует (что в общем-то одно и то же) - остается в режиме загрузчика, тревожно мигает лампочками и ждет прошивку по UART. Все, что надо знать загрузчику - это откуда начинается приложение и какой его размер. Или, как второй вариант - размер приложения хранится в приложении по жестко зафиксированному адресу. Дальше гляньте обсуждение тут . И еще тут - правда про SAM7, но он тоже ARM. Почитать на английском - да хотя бы апликашки по загрузчикам для AVR - AVR231, например. Оно хоть и совсем не ARM, но для общего развития будет полезно. Ну и прект загрузчика из TNKernel тоже обязательно посмотрите. То, что кейл кладет в нулевой сектор - это вектора исключений и стартап-код. Без них не бывает ни одной С-программы. В документации к вашему компилятору он должен быть описан. Ищите в документации слово startup. Причем, поскольку загрузчик и приложение - разные пректы, каждый из них должен иметь свой собственный независимый стартап. Для переключения между векторами исключения загрузчика и приложения удобно использовать remap.