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

 
 
 
Reply to this topicStart new topic
> Как установить стартовый аддресс компиляции в IAR?
Amper25
сообщение Jul 4 2007, 11:18
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929



Народ, помогите! help.gif

Каким образом установить адрес, куда будет компилится вся программа, написаная на IAR.
Тоесть все функции и main и остальные.

Мне надо чтобы вся программа располагалась с определенного адресса, на который я сделаю JUMP из
bootloader-a.
Или, еще лучше, если бы при компиляции генерировался адресно независимый код(то есть все jump-ы
были бы относительными а не абсолютными.)

Вообще, где нибудь существует список команд компилятора с описанием?


Система:
IAR v4.41 for ARM
AT91SAM9263
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Jul 4 2007, 12:13
Сообщение #2


тут может быть ваша реклама
*****

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



скрипт для линкера переписать
Go to the top of the page
 
+Quote Post
Amper25
сообщение Jul 4 2007, 12:36
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929



А где и как это переписывается?

У меня линкер используется с теми настройками, которые были установлены по умолчанию при создании проекта. И вообще я никогда раньше ничего в линкере не трогал.
Может есть просто config файл какой-то с настройками?
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Jul 4 2007, 13:29
Сообщение #4


тут может быть ваша реклама
*****

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



да конфиг. Если не ошибаюсь xcl расширение. Надо создать такой свой файлик (за прототип можно взять ИАРовский, который лежит где то в его папках (не могу точно сказать ибо ИАР на работе не стоит)) и указать этот файлик в настройках проекта.

Как редактировать - читать хелп по линкеру.
Go to the top of the page
 
+Quote Post
Amper25
сообщение Jul 4 2007, 14:31
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929



Спасибо помогло.
Нашел такие установки:
-DROMSTART=08000
-DROMEND=FFFFF

Замена констант меняет аддресс по которому будет располагатся откомпилированный код.

Но вообщем то мне не совсем это нужно. Я хочу выбирать, в какую область памяти размещать функции.
То есть: Эту поместить в "ROM"(я имею ввиду область после REMAP), другие поместить в SDRAM,
какие-то поместить во встроенную RAM. Как это делать?
Очевидно изменение конфига линковщика ничего не даст.
Например я перед функцией ставлю __ramfunc, но компилятор все равно её размещает в области памяти ROMа.
Как с этим боротся? smile3009.gif

thanks

PS: Ну и конечно хотелось бы получать несколько файлов после компиляции - для разных областей памяти.

Сообщение отредактировал Amper25 - Jul 4 2007, 14:33
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Jul 4 2007, 15:49
Сообщение #6


тут может быть ваша реклама
*****

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



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

Вам нужно пользоваться дириктивами компилятора section (или как то так, ИАРа нету под рукой). Нужную вункцию или переменную обрамляете дириктивой. Секции можно создавать свои и прописывать для них соответствующие адреса.

Конекретнее не могу, так как этим не пользуюсь почти и не помню, а компилятора под рукой нету
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 4 2007, 15:54
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Amper25
сообщение Jul 5 2007, 15:21
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 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.


Ну вообщем, спсибо за советы, буду разбиратся. smile3046.gif

Сообщение отредактировал Amper25 - Jul 5 2007, 15:34
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 5 2007, 16:03
Сообщение #9


Гуру
******

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



Цитата(Amper25 @ Jul 5 2007, 18:21) *
По сути, я хочу чтобы все функции включая main() компилировались сразу в область RAM.
Все функции по умолчанию компилятся в сегмент CODE. А куда (в какие адреса) вы его разместите - решать вам.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Jul 9 2007, 09:50
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Сергей, не в эту тему. На Сахаре по RTOS вопросы появились, может примешь участие.
Go to the top of the page
 
+Quote Post

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

 


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


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