Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как установить стартовый аддресс компиляции в IAR?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Amper25
Народ, помогите! help.gif

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

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

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


Система:
IAR v4.41 for ARM
AT91SAM9263
jorikdima
скрипт для линкера переписать
Amper25
А где и как это переписывается?

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

Как редактировать - читать хелп по линкеру.
Amper25
Спасибо помогло.
Нашел такие установки:
-DROMSTART=08000
-DROMEND=FFFFF

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

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

thanks

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

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

Конекретнее не могу, так как этим не пользуюсь почти и не помню, а компилятора под рукой нету
Сергей Борщ
Цитата(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?
Amper25
Цитата
Смотреть внимательно .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, 18:21) *
По сути, я хочу чтобы все функции включая main() компилировались сразу в область RAM.
Все функции по умолчанию компилятся в сегмент CODE. А куда (в какие адреса) вы его разместите - решать вам.
VladimirYU
Сергей, не в эту тему. На Сахаре по RTOS вопросы появились, может примешь участие.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.