|
|
  |
Как установить стартовый аддресс компиляции в IAR? |
|
|
|
Jul 4 2007, 11:18
|
Местный
  
Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929

|
Народ, помогите! Каким образом установить адрес, куда будет компилится вся программа, написаная на IAR. Тоесть все функции и main и остальные. Мне надо чтобы вся программа располагалась с определенного адресса, на который я сделаю JUMP из bootloader-a. Или, еще лучше, если бы при компиляции генерировался адресно независимый код(то есть все jump-ы были бы относительными а не абсолютными.) Вообще, где нибудь существует список команд компилятора с описанием? Система: IAR v4.41 for ARM AT91SAM9263
|
|
|
|
|
Jul 4 2007, 14:31
|
Местный
  
Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929

|
Спасибо помогло. Нашел такие установки: -DROMSTART=08000 -DROMEND=FFFFF Замена констант меняет аддресс по которому будет располагатся откомпилированный код. Но вообщем то мне не совсем это нужно. Я хочу выбирать, в какую область памяти размещать функции. То есть: Эту поместить в "ROM"(я имею ввиду область после REMAP), другие поместить в SDRAM, какие-то поместить во встроенную RAM. Как это делать? Очевидно изменение конфига линковщика ничего не даст. Например я перед функцией ставлю __ramfunc, но компилятор все равно её размещает в области памяти ROMа. Как с этим боротся? thanks PS: Ну и конечно хотелось бы получать несколько файлов после компиляции - для разных областей памяти.
Сообщение отредактировал Amper25 - Jul 4 2007, 14:33
|
|
|
|
|
Jul 4 2007, 15:49
|

тут может быть ваша реклама
    
Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280

|
Цитата(Amper25 @ Jul 4 2007, 18:31)  Я хочу выбирать, в какую область памяти размещать функции. То есть: Эту поместить в "ROM"(я имею ввиду область после REMAP), другие поместить в SDRAM, какие-то поместить во встроенную RAM. Как это делать? Очевидно изменение конфига линковщика ничего не даст. Например я перед функцией ставлю __ramfunc, но компилятор все равно её размещает в области памяти ROMа. Как с этим боротся?  Вам нужно пользоваться дириктивами компилятора section (или как то так, ИАРа нету под рукой). Нужную вункцию или переменную обрамляете дириктивой. Секции можно создавать свои и прописывать для них соответствующие адреса. Конекретнее не могу, так как этим не пользуюсь почти и не помню, а компилятора под рукой нету
|
|
|
|
|
Jul 4 2007, 15:54
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Amper25 @ Jul 4 2007, 17:31)  Но вообщем то мне не совсем это нужно. Я хочу выбирать, в какую область памяти размещать функции. В файле, который вы смотрели определены несколько сегментов (INTVEC, CODE, DATA_Z и т.д.). В описании линкера вы можете почитать, какой из этих сегментов для чего нужен (полезно). Вы можете там же описать свои сегменты и разместить их в нужных вам адресах. Далее, в описании компилятора в разделе "Placing code and data" и "#pragma location" узнаете, как разместить ваши функции (или данные) в желаемые сегменты. Только учтите, что если вы хотите таким образом разместить функцию в RAM, то вам придется вручную копировать ее из ROM или пользоваться штатным квалификатором __ramfunc. Цитата(Amper25 @ Jul 4 2007, 17:31)  Например я перед функцией ставлю __ramfunc, но компилятор все равно её размещает в области памяти ROMа. Как с этим боротся? Смотреть внимательно .xcl и .map - в ROM размещается "образ" функции, который после запуска программы переписывается в RAM. А как иначе вы себе представляете хранение кода функции в RAM?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 5 2007, 15:21
|
Местный
  
Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929

|
Цитата Смотреть внимательно .xcl и .map - в ROM размещается "образ" функции, который после запуска программы переписывается в RAM. А как иначе вы себе представляете хранение кода функции в RAM? Так в том то и дело. Прога пишется под SAM9263 у которого нет Flash-a нет ROM-a, а есть только RAM. И я хочу написать прогу, которую буду загружать сразу в RAM с помощью SAMBA. Вообщем у проца есть 2 RAM-a. Один встроеный, но маленький, второй большой но внешний. Область встроенного RAMa воспринимается IAR-ом как ROM. Тоесть изначально на эту область были определены -DROMSTART=08000 -DROMEND=FFFFF в конфиг файле. Но по сути эта память будет также стиратся при отключении питания, как и внешняя рам. По сути, я хочу чтобы все функции включая main() компилировались сразу в область RAM. Ну вообщем, спсибо за советы, буду разбиратся.
Сообщение отредактировал Amper25 - Jul 5 2007, 15:34
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|