Перейти к содержанию
    

Как установить стартовый аддресс компиляции в IAR?

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

 

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

Тоесть все функции и main и остальные.

 

Мне надо чтобы вся программа располагалась с определенного адресса, на который я сделаю JUMP из

bootloader-a.

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

были бы относительными а не абсолютными.)

 

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

 

 

Система:

IAR v4.41 for ARM

AT91SAM9263

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

У меня линкер используется с теми настройками, которые были установлены по умолчанию при создании проекта. И вообще я никогда раньше ничего в линкере не трогал.

Может есть просто config файл какой-то с настройками?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Как редактировать - читать хелп по линкеру.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо помогло.

Нашел такие установки:

-DROMSTART=08000

-DROMEND=FFFFF

 

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

 

Но вообщем то мне не совсем это нужно. Я хочу выбирать, в какую область памяти размещать функции.

То есть: Эту поместить в "ROM"(я имею ввиду область после REMAP), другие поместить в SDRAM,

какие-то поместить во встроенную RAM. Как это делать?

Очевидно изменение конфига линковщика ничего не даст.

Например я перед функцией ставлю __ramfunc, но компилятор все равно её размещает в области памяти ROMа.

Как с этим боротся? :smile3009:

 

thanks

 

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

Изменено пользователем Amper25

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я хочу выбирать, в какую область памяти размещать функции.

То есть: Эту поместить в "ROM"(я имею ввиду область после REMAP), другие поместить в SDRAM,

какие-то поместить во встроенную RAM. Как это делать?

Очевидно изменение конфига линковщика ничего не даст.

Например я перед функцией ставлю __ramfunc, но компилятор все равно её размещает в области памяти ROMа.

Как с этим боротся? :smile3009:

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

 

Конекретнее не могу, так как этим не пользуюсь почти и не помню, а компилятора под рукой нету

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но вообщем то мне не совсем это нужно. Я хочу выбирать, в какую область памяти размещать функции.
В файле, который вы смотрели определены несколько сегментов (INTVEC, CODE, DATA_Z и т.д.). В описании линкера вы можете почитать, какой из этих сегментов для чего нужен (полезно). Вы можете там же описать свои сегменты и разместить их в нужных вам адресах. Далее, в описании компилятора в разделе "Placing code and data" и "#pragma location" узнаете, как разместить ваши функции (или данные) в желаемые сегменты. Только учтите, что если вы хотите таким образом разместить функцию в RAM, то вам придется вручную копировать ее из ROM или пользоваться штатным квалификатором __ramfunc.
Например я перед функцией ставлю __ramfunc, но компилятор все равно её размещает в области памяти ROMа.

Как с этим боротся?

Смотреть внимательно .xcl и .map - в ROM размещается "образ" функции, который после запуска программы переписывается в RAM. А как иначе вы себе представляете хранение кода функции в RAM?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотреть внимательно .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:

Изменено пользователем Amper25

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По сути, я хочу чтобы все функции включая main() компилировались сразу в область RAM.
Все функции по умолчанию компилятся в сегмент CODE. А куда (в какие адреса) вы его разместите - решать вам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сергей, не в эту тему. На Сахаре по RTOS вопросы появились, может примешь участие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...