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

 
 
 
Reply to this topicStart new topic
> 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
Сергей Борщ
сообщение 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
jorikdima
сообщение Jan 21 2011, 23:37
Сообщение #3


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

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



Спасибо!
По поводу последнего пункта, сам так и сделал sm.gif.
Go to the top of the page
 
+Quote Post
KRS
сообщение Jan 24 2011, 10:50
Сообщение #4


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



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

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

Go to the top of the page
 
+Quote Post

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

 


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


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