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

 
 
> IAR XLINK
jorikdima
сообщение Jan 21 2011, 06:08
Сообщение #1


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

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



Приветствую.
Несколько вопросов по линкеру ИАРа, в документации либо не нашел, либо плохо искал. Вообще речь про МСП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 чтоб он покрывал всю область памяти, занимаемую несколькими секциями. Так можно?
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Jan 21 2011, 22:19
Сообщение #2


Гуру
******

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



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



--------------------
На любой вопрос даю любой ответ
"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



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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 12:57
Рейтинг@Mail.ru


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