Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR XLINK
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
jorikdima
Приветствую.
Несколько вопросов по линкеру ИАРа, в документации либо не нашел, либо плохо искал. Вообще речь про МСП430 если это значимо.
1. Есть ли дириктивы условной линковки, типа #ifdef ? Хочу по-разному линковать в зависимости от определения дефайнов. Ну либо как в ИАРе в зависимости от дефайна в свойствах проекта подключать разные xcl файлы?
2. Хочу маппировать вектора прерывания на область альтернативных векторов в ОЗУ. Соответственно есть область во флешь где располагаются вектора и она заключена в секцию INTVECT. Можно ли ее АВТОМАТИЧЕСКИ скопировать в ОЗУ на нужные адреса, то есть в стартапе, подшаманив линкерный файл. Как ручками это сделать я знаю.
3. Есть несколько секций, которые по архитектурным соображениям должны лежать в нижних 64к адресного пространства. Описываются они так:
Код
-Z(CODE)CSTART,ISR_CODE
-Z(CONST)DIFUNCT,CHECKSUM
-Z(CONST)DATA16_C,DATA16_ID

Я этот блок флеша для своих нужд стираю, соответственно надо значала скопировать в ОЗУ, потом стереть, потом записать обратно. Как сделать какое-то объединение этих секций в одну, чтоб я не писал 6 раз что-то типа:
Код
void* const ram_start = __sfb("INTVEC"); /* start of RAMCODE */
    const void* const ram_end = __sfe("INTVEC"); /* end of RAMCODE */
    const void* const rom_start = __sfb("INTVECROM"); /* start of ROMCODE */
    
    /* compute the number of bytes to copy */
    UINT32 size = (UINT8*)(ram_end) - (UINT8*)(ram_start);
    /* copy the contents of ROMCODE to RAMCODE */
    memcpy(ram_start, rom_start, size );

для каждой из 6 секций. Сделать бы своего рода union чтоб он покрывал всю область памяти, занимаемую несколькими секциями. Так можно?
Спасибо.
Сергей Борщ
QUOTE (jorikdima @ Jan 21 2011, 08:08) *
1. Есть ли дириктивы условной линковки, типа #ifdef ? Хочу по-разному линковать в зависимости от определения дефайнов. Ну либо как в ИАРе в зависимости от дефайна в свойствах проекта подключать разные xcl файлы?
Создать разные конфигурации. В каждой (в настройках среды) указать свои дефайны и свой скрипт линкера.
QUOTE (jorikdima @ Jan 21 2011, 08:08) *
Соответственно есть область во флешь где располагаются вектора и она заключена в секцию INTVECT. Можно ли ее АВТОМАТИЧЕСКИ скопировать в ОЗУ на нужные адреса, то есть в стартапе, подшаманив линкерный файл. Как ручками это сделать я знаю.
Очень сомневаюсь. Разве что попытаться как-то совместить ее с DATA_I.
QUOTE (jorikdima @ Jan 21 2011, 08:08) *
Сделать бы своего рода union чтоб он покрывал всю область памяти, занимаемую несколькими секциями. Так можно?
Нет. Но линкер располагает секции в том порядке, в котором вы их объявили. Что мешает указывать вашей процедуре начало первой секции и конец последней? Чтобы не переписывать при добавлении в начало/конец новых секций - заведите фиктивные секции:
CODE
-Z(CONST)ERASEABLE_START
-Z(CODE)CSTART,ISR_CODE
-Z(CONST)DIFUNCT,CHECKSUM
-Z(CONST)DATA16_C,DATA16_ID
-Z(CONST)ERASEABLE_END

jorikdima
Спасибо!
По поводу последнего пункта, сам так и сделал sm.gif.
KRS
Цитата(jorikdima @ Jan 21 2011, 09:08) *
для каждой из 6 секций. Сделать бы своего рода union чтоб он покрывал всю область памяти, занимаемую несколькими секциями.

Это не union, a struct.
union сделать можно для этого есть символ @, например при отладке в ОЗУ data_i на data_id можно сразу наложить (для экономии памяти)

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.