Amper25 0 4 июля, 2007 Опубликовано 4 июля, 2007 · Жалоба Народ, помогите! Каким образом установить адрес, куда будет компилится вся программа, написаная на IAR. Тоесть все функции и main и остальные. Мне надо чтобы вся программа располагалась с определенного адресса, на который я сделаю JUMP из bootloader-a. Или, еще лучше, если бы при компиляции генерировался адресно независимый код(то есть все jump-ы были бы относительными а не абсолютными.) Вообще, где нибудь существует список команд компилятора с описанием? Система: IAR v4.41 for ARM AT91SAM9263 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jorikdima 0 4 июля, 2007 Опубликовано 4 июля, 2007 · Жалоба скрипт для линкера переписать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Amper25 0 4 июля, 2007 Опубликовано 4 июля, 2007 · Жалоба А где и как это переписывается? У меня линкер используется с теми настройками, которые были установлены по умолчанию при создании проекта. И вообще я никогда раньше ничего в линкере не трогал. Может есть просто config файл какой-то с настройками? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jorikdima 0 4 июля, 2007 Опубликовано 4 июля, 2007 · Жалоба да конфиг. Если не ошибаюсь xcl расширение. Надо создать такой свой файлик (за прототип можно взять ИАРовский, который лежит где то в его папках (не могу точно сказать ибо ИАР на работе не стоит)) и указать этот файлик в настройках проекта. Как редактировать - читать хелп по линкеру. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Amper25 0 4 июля, 2007 Опубликовано 4 июля, 2007 (изменено) · Жалоба Спасибо помогло. Нашел такие установки: -DROMSTART=08000 -DROMEND=FFFFF Замена констант меняет аддресс по которому будет располагатся откомпилированный код. Но вообщем то мне не совсем это нужно. Я хочу выбирать, в какую область памяти размещать функции. То есть: Эту поместить в "ROM"(я имею ввиду область после REMAP), другие поместить в SDRAM, какие-то поместить во встроенную RAM. Как это делать? Очевидно изменение конфига линковщика ничего не даст. Например я перед функцией ставлю __ramfunc, но компилятор все равно её размещает в области памяти ROMа. Как с этим боротся? :smile3009: thanks PS: Ну и конечно хотелось бы получать несколько файлов после компиляции - для разных областей памяти. Изменено 4 июля, 2007 пользователем Amper25 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jorikdima 0 4 июля, 2007 Опубликовано 4 июля, 2007 · Жалоба Я хочу выбирать, в какую область памяти размещать функции. То есть: Эту поместить в "ROM"(я имею ввиду область после REMAP), другие поместить в SDRAM, какие-то поместить во встроенную RAM. Как это делать? Очевидно изменение конфига линковщика ничего не даст. Например я перед функцией ставлю __ramfunc, но компилятор все равно её размещает в области памяти ROMа. Как с этим боротся? :smile3009: Вам нужно пользоваться дириктивами компилятора section (или как то так, ИАРа нету под рукой). Нужную вункцию или переменную обрамляете дириктивой. Секции можно создавать свои и прописывать для них соответствующие адреса. Конекретнее не могу, так как этим не пользуюсь почти и не помню, а компилятора под рукой нету Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 133 4 июля, 2007 Опубликовано 4 июля, 2007 · Жалоба Но вообщем то мне не совсем это нужно. Я хочу выбирать, в какую область памяти размещать функции.В файле, который вы смотрели определены несколько сегментов (INTVEC, CODE, DATA_Z и т.д.). В описании линкера вы можете почитать, какой из этих сегментов для чего нужен (полезно). Вы можете там же описать свои сегменты и разместить их в нужных вам адресах. Далее, в описании компилятора в разделе "Placing code and data" и "#pragma location" узнаете, как разместить ваши функции (или данные) в желаемые сегменты. Только учтите, что если вы хотите таким образом разместить функцию в RAM, то вам придется вручную копировать ее из ROM или пользоваться штатным квалификатором __ramfunc.Например я перед функцией ставлю __ramfunc, но компилятор все равно её размещает в области памяти ROMа. Как с этим боротся? Смотреть внимательно .xcl и .map - в ROM размещается "образ" функции, который после запуска программы переписывается в RAM. А как иначе вы себе представляете хранение кода функции в RAM? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Amper25 0 5 июля, 2007 Опубликовано 5 июля, 2007 (изменено) · Жалоба Смотреть внимательно .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: Изменено 5 июля, 2007 пользователем Amper25 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 133 5 июля, 2007 Опубликовано 5 июля, 2007 · Жалоба По сути, я хочу чтобы все функции включая main() компилировались сразу в область RAM.Все функции по умолчанию компилятся в сегмент CODE. А куда (в какие адреса) вы его разместите - решать вам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 9 июля, 2007 Опубликовано 9 июля, 2007 · Жалоба Сергей, не в эту тему. На Сахаре по RTOS вопросы появились, может примешь участие. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться