реклама на сайте
подробности

 
 
> Вопросы по созданию своего загрузчика для LPC17xx
Altemir
сообщение Sep 3 2011, 21:42
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Altemir
сообщение Sep 5 2011, 11:38
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 249
Регистрация: 2-05-06
Из: Россия, Поволжье
Пользователь №: 16 686



И ещё. Почему при указании в *.icf файле строки, например:
Код
define symbol __ICFEDIT_region_ROM_start__ = 0x00001100;

всё-равно заполняет область 0x100...0xFFF кодом? В map-файле он явно написал:
Код
"A1":  place at 0x00001000 { ro section .intvec };
"P1":  place in [from 0x00001100 to 0x0003ffff] { ro };
"P2":  place in [from 0x10000000 to 0x10007fff] { rw, block CSTACK, block HEAP };

  Section             Kind        Address    Size  Object
  -------             ----        -------    ----  ------
"A1":                                        0xc4
  .intvec             ro code  0x00001000    0xc4  startup_LPC17xx.o [1]
                             - 0x000010c4    0xc4

"P1":                                      0x675c
  .text               ro code  0x00001100  0x2050  blablabla.o [1]
...

Позиции в области 0x100...0xFFF нигде в map файле не встречаются. Если же в свойствах проекта указать заполнение нулями этой области, тогда да, там чисто, map-ы не отличаются, а код разумно вырастает на 4КБ. Правда, ни векторы, ни код всё-равно линкуются не туда. Где что не так?

P.S. С этим разобрался. Виноват IAR. hex-файл генерит правильно, а в бинарнике отрезает младшую часть неиспользуемых адресов *WALL* Только сильно легче не стало. С ремап-ом всё-равно не запускается код. Неужели никто не делал?

P.P.S. Похоже, догадываюсь, почему ремап не работает. Кто подскажет, чем заменить в icf-файле ранее использованную в xcl-файле директиву типа -KINTVEC=05000,1 ? Подобное позволяло иметь копию векторов прерываний по адресу 0x5000.
Go to the top of the page
 
+Quote Post
gladov
сообщение Sep 6 2011, 03:58
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



Цитата(Altemir @ Sep 5 2011, 15:38) *
P.P.S. Похоже, догадываюсь, почему ремап не работает. Кто подскажет, чем заменить в icf-файле ранее использованную в xcl-файле директиву типа -KINTVEC=05000,1 ? Подобное позволяло иметь копию векторов прерываний по адресу 0x5000.


А можно поинтересоваться для чего нужны 2 копии таблицы векторов? Вы очень упорно копаете, но создается стойкое ощущение, что немного не туда sm.gif
У Вас же будет бутлоадер? Наверное, он ляжет в один-два сектора в начале ПЗУ, так? А ведь он туда ляжет со своей таблицей, так? Тогда зачем Вам иметь еще и две таблицы у приложения? Его нужно просто сдвинуть на N-е кол-во секторов вперед и все. Только сдвинуть целиком, вместе с таблицей векторов. Например, так:
Код
...
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x00002000;
define symbol __ICFEDIT_region_ROM_end__   = 0x0003FFFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x10000000;
define symbol __ICFEDIT_region_RAM_end__   = 0x10007FFF;
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = __ICFEDIT_region_ROM_start__;
/*-Sizes-*/
...
Go to the top of the page
 
+Quote Post
Altemir
сообщение Sep 6 2011, 04:59
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 249
Регистрация: 2-05-06
Из: Россия, Поволжье
Пользователь №: 16 686



Цитата(gladov @ Sep 6 2011, 07:58) *
А можно поинтересоваться для чего нужны 2 копии таблицы векторов? Вы очень упорно копаете, но создается стойкое ощущение, что немного не туда sm.gif

Можно, конечно. Причин было две:
1. Пока не был дан проект от второго программиста, который занимается основной программой, хотел в самом загрузчике обкатать перемещение таблицы векторов прерываний во флэше. Протупил (споткнулся) из-за неправильно генерируемого бинарника сначала, потом понял, что простыми методами из самого загрузчика не сделать такой тест. Надо хотя бы примитивную главную программку залить, или играться с ремапом в ОЗУ, т.к. начальная же область пустая sm.gif
2. Поскольку проекты перетаскиваются с arm7, то ранее на Builder-е была создана спецпрограммка, которая в постбилде отрезала начальный пустой ненужный кусок от главной программы (включая вектора), получала инфу из спецтаблицы, расположенной следом за векторами (и меняла её тоже, всякую инфу добавляя), при этом имелась копия такой таблицы для главной программы по предопределённому адресу (с учётом смещения главной, ессно), из которой оная также получала необходимые сведения. Также постбилдной утилитой проводилось шифрование прошивки. Хотелось перенести такую технологию без изменений, введя копию таблицы через icf-файл, но, поняв в соседней ветке, что это нельзя сделать, пришлось делать через код в главной проге, объявляя две копии по предопределённым адресам. В принципе, несложно, но некрасиво sm.gif Уже всё проверил.

Так что всем спасибо за советы.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Altemir   Вопросы по созданию своего загрузчика для LPC17xx   Sep 3 2011, 21:42
- - gladov   Цитата(Altemir @ Sep 4 2011, 01:42) Всем ...   Sep 5 2011, 04:10
|- - Altemir   Цитата(gladov @ Sep 5 2011, 08:10) Да, пр...   Sep 5 2011, 05:09
|- - gladov   Цитата(Altemir @ Sep 5 2011, 09:09) Да, к...   Sep 5 2011, 05:22
- - Altemir   Попробовал сделать ремап векторов прерываний. Не з...   Sep 5 2011, 09:38
- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 21:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01394 секунд с 7
ELECTRONIX ©2004-2016