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

 
 
> Комбинированный проект ASM + C++
BSACPLD
сообщение Sep 26 2011, 14:57
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 371
Регистрация: 24-07-05
Из: Москва
Пользователь №: 7 056



Пытаюсь собрать комбинированный проект ASM + C++.
Есть массив в ассемблерном коде объявленный следующим образом:
Код
PUBLIC rx_buf

ASEG DATA
    ORG 0x0060
rx_buf:    DS8 1520

В C++ коде он объявлен как extern "C" unsigned char rx_buf[1520] ;.

Есть также массив данных объявленный в С++ коде:
CODE

char test[10] ;
test[0] = 0x01 ;
test[1] = 0x02 ;
test[2] = 0x03 ;
test[3] = 0x04 ;
test[4] = 0x05 ;
test[5] = 0x06 ;
test[6] = 0x07 ;
test[7] = 0x08 ;
test[8] = 0x09 ;
test[9] = 0x0A ;


При сборке проекта IAR размещает массив test по адресу 0x0060, т.е. получается, что один массив данных налезает на другой.

Как сделать так, чтобы массивы не перекрывались?

Сообщение отредактировал IgorKossak - Sep 27 2011, 08:11
Причина редактирования: [code] для маленького листинга
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
Палыч
сообщение Sep 26 2011, 15:29
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Сменить абсолютный сегмент на relocatable
Go to the top of the page
 
+Quote Post
BSACPLD
сообщение Sep 27 2011, 05:24
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 371
Регистрация: 24-07-05
Из: Москва
Пользователь №: 7 056



А как это правильно сделать?
Если написать:
Код
RSEG DATA

rx_buf:        DS8 1520

то линкер выдаёт ошибку:
Fatal Error[e72]: Segment DATA must be defined in a segment definition option (-Z, -b or -P)

Сообщение отредактировал IgorKossak - Sep 27 2011, 08:09
Причина редактирования: [code]
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Sep 27 2011, 06:34
Сообщение #4


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Вы свой rx_buff объявите в С++ модуле, а в ASM модуле объявите его как EXTERN.
Go to the top of the page
 
+Quote Post
BSACPLD
сообщение Sep 27 2011, 08:05
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 371
Регистрация: 24-07-05
Из: Москва
Пользователь №: 7 056



Всем спасибо за помощь.
Сделал следующим образом.
Код
PUBLIC rx_buf

RSEG NEAR_N

rx_buf:    DS8 1520


Сообщение отредактировал IgorKossak - Sep 27 2011, 08:10
Причина редактирования: [code]
Go to the top of the page
 
+Quote Post

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

 


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


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