|
Вопросы по созданию своего загрузчика для LPC17xx |
|
|
|
Sep 3 2011, 21:42
|
Местный
  
Группа: Свой
Сообщений: 249
Регистрация: 2-05-06
Из: Россия, Поволжье
Пользователь №: 16 686

|
Всем доброго времени суток. Адаптирую загрузчик с LPC2xxx на LPC176x. Копался в мануалах, столкнулся с тем, что у кортекса таблица векторов прерываний гораздо больше, чем у arm7. Как я понял, она может занимать максимум 1КБ против 64 байт у arm7. Для предыдущих проектов использовалась программа шифрования прошивки, которая знала расположение спецтаблицы, находящейся по определённому адресу сразу следом за таблицей векторов. Получается, теперь необходимо или ремапить таблицу векторов в кортексе для сохранения совместимости с софтом верхнего уровня, либо переписывать этот софт? Можно ли занимать адреса, скажем, 0x40...0x100 объявлением массива через __root const? И ещё, в каком документе от ARM описан участок памяти 0x0000 - 0x0400? В DDI0337H_cortex_m3_r2p0_trm.pdf нет. Просто code и всё. Кто может подсказать, что и где там обычно расположено? Компилятор - IAR.
|
|
|
|
|
 |
Ответов
|
Sep 5 2011, 04:10
|
Частый гость
 
Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687

|
Цитата(Altemir @ Sep 4 2011, 01:42)  Всем доброго времени суток. Адаптирую загрузчик с LPC2xxx на LPC176x. Копался в мануалах, столкнулся с тем, что у кортекса таблица векторов прерываний гораздо больше, чем у arm7. Как я понял, она может занимать максимум 1КБ против 64 байт у arm7. Для предыдущих проектов использовалась программа шифрования прошивки, которая знала расположение спецтаблицы, находящейся по определённому адресу сразу следом за таблицей векторов. Получается, теперь необходимо или ремапить таблицу векторов в кортексе для сохранения совместимости с софтом верхнего уровня, либо переписывать этот софт? Можно ли занимать адреса, скажем, 0x40...0x100 объявлением массива через __root const? И ещё, в каком документе от ARM описан участок памяти 0x0000 - 0x0400? В DDI0337H_cortex_m3_r2p0_trm.pdf нет. Просто code и всё. Кто может подсказать, что и где там обычно расположено? Компилятор - IAR. Да, придется спецтаблицу передвинуть за таблицу векторов. Но проблемы не вижу, т.к. со сменой ядра Вам обязательно пересобирать как загрузчик, так и основной софт. Вот и сдвиньте все дальше. Адреса 0х40 и выше конечно можно использовать как угодно (и объявлять тоже), но только есть ли гарантия, что не произойдет прерывания, адрес вектора которого попадет на ваши личные данные? Описание на области памяти ищите в DS на контроллер. Cortex-M3 стандартизует лишь область векторов прерываний, да и то не строго, а остальное, как правило, отдано под пользовательский код.
|
|
|
|
|
Sep 5 2011, 05:09
|
Местный
  
Группа: Свой
Сообщений: 249
Регистрация: 2-05-06
Из: Россия, Поволжье
Пользователь №: 16 686

|
Цитата(gladov @ Sep 5 2011, 08:10)  Да, придется спецтаблицу передвинуть за таблицу векторов... Да, к этому и пришёл. Спасибо. Думаю, в моём случае сдвинуть на 1КБ - не проблема. Цитата Описание на области памяти ищите в DS на контроллер. Cortex-M3 стандартизует лишь область векторов прерываний, да и то не строго, а остальное, как правило, отдано под пользовательский код. Если б NXP где-то явно это описала... В UM10360.pdf Rev. 2 — 19 August 2010 только на стр. 19 общая карта памяти  Похоже, дизасмить придётся. А такой вопрос - где обычно после IARа находится стартовый вектор? Т.е., по какому адресу вызывать свою программу из загрузчика, если в *.icf файле я определяю: Код define symbol __ICFEDIT_region_ROM_start__ = 0x00008000;
|
|
|
|
|
Sep 5 2011, 05:22
|
Частый гость
 
Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687

|
Цитата(Altemir @ Sep 5 2011, 09:09)  Да, к этому и пришёл. Спасибо. Думаю, в моём случае сдвинуть на 1КБ - не проблема. Если б NXP где-то явно это описала... В UM10360.pdf Rev. 2 — 19 August 2010 только на стр. 19 общая карта памяти  Похоже, дизасмить придётся. А такой вопрос - где обычно после IARа находится стартовый вектор? Т.е., по какому адресу вызывать свою программу из загрузчика, если в *.icf файле я определяю: Код define symbol __ICFEDIT_region_ROM_start__ = 0x00008000; Если внимательно прочесть, то ничего дизасмить не придется. После стандартных 16 прерываний ядра Cortex-M3 лежат ВСЕ векторы, которые имеются в данном камне. Считате, умножаете на 4 и т.д. После векторов память используется ИАРом по своему усмотрению. Но имхо и это знать вовсе не обязательно. Какая Вам разница куда именно ИАР положит какой код? Если обязательно сделать "дырку" между векторами и кодом для служебной информации, так сделайте ее с помощью конфига линкера. Точка входа в приложение у ИАРа располагается произвольно и знать ее вовсе не обязательно. Достаточно вычитать адрес начала кода из образа (опять же, см. описание первых 0х40 байтов в кортексе).
|
|
|
|
Сообщений в этой теме
Altemir Вопросы по созданию своего загрузчика для LPC17xx Sep 3 2011, 21:42 Altemir Попробовал сделать ремап векторов прерываний. Не з... Sep 5 2011, 09:38 Altemir И ещё. Почему при указании в *.icf файле строки, н... Sep 5 2011, 11:38 gladov Цитата(Altemir @ Sep 5 2011, 15:38) P.P.S... Sep 6 2011, 03:58  Altemir Цитата(gladov @ Sep 6 2011, 07:58) А можн... Sep 6 2011, 04:59 Alechek От сабя скажу следующее:
Я тоже вначале был немног... Sep 6 2011, 07:00 Altemir Цитата(Alechek @ Sep 6 2011, 11:00) В ито... Sep 6 2011, 09:53 KRS Я для IAR такой код перехода в программу поставил
... Sep 6 2011, 14:34 Altemir Цитата(KRS @ Sep 6 2011, 18:34) Я для IAR... Sep 7 2011, 04:52  KRS Цитата(Altemir @ Sep 7 2011, 08:52) Не по... Sep 7 2011, 10:34 Altemir KRS
Отлично! Ещё раз - благодарю. Sep 7 2011, 11:18 Vitaliy_ARM Пишу спец загрузчик и как раз столкнулся с тем, чт... Sep 16 2011, 12:22  KRS Цитата(Vitaliy_ARM @ Sep 16 2011, 16:22) ... Sep 16 2011, 13:10   Alechek Цитата(KRS @ Sep 16 2011, 19:10) но принц... Sep 19 2011, 04:50    KRS Цитата(Alechek @ Sep 19 2011, 08:50) Глав... Sep 19 2011, 20:39 Alechek Область то тоже должна быть выровнена, причем байт... Sep 20 2011, 06:12
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|