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

 
 
> ILINK и куски RAM по разным адресам
grinux
сообщение Aug 27 2017, 20:12
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 2-01-09
Пользователь №: 42 891



Всем привет.
Может кто-нибудь знает, как заставить линкер автоматически раскидывать rw данные по памяти, состоящей, например, у NXP LPC23xx из трех кусков.
define symbol __ICFEDIT_region_RAM_start__ = 0x40000040;
define symbol __ICFEDIT_region_RAM_end__ = 0x40007FFF;
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__];

define symbol __region_USB_DMA_RAM_start__ = 0x7FD00000;
define symbol __region_USB_DMA_RAM_end__ = 0x7FD01FFF;
define region USB_DMA_RAM_region= mem:[from __region_USB_DMA_RAM_start__ to __region_USB_DMA_RAM_end__];

define symbol __region_EMAC_DMA_RAM_start__ = 0x7FE00000;
define symbol __region_EMAC_DMA_RAM_end__ = 0x7FE03FFF;
define region EMAC_DMA_RAM_region= mem:[from __region_EMAC_DMA_RAM_start__ to __region_EMAC_DMA_RAM_end__];

place in RAM_region { readwrite,
block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,
block UND_STACK, block ABT_STACK, block HEAP };
place in USB_DMA_RAM_region
{ section USB_DMA_RAM };
place in EMAC_DMA_RAM_region
{ section EMAC_DMA_RAM };

сейчас если я хочу положить в область USB или EMAC что то, то нужно явно указывать:
int var @ "USB_DMA_RAM";

Хотелось бы так определить эти три зоны в icf файле, чтобы не нужно было явно указывать расположение для переменных.
Вот такой трюк не прокатил:
place in RAM_region { readwrite,
block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,
block UND_STACK, block ABT_STACK, block HEAP };
place in USB_DMA_RAM_region
{ readwrite };
place in EMAC_DMA_RAM_region
{ readwrite };


Сообщение отредактировал grinux - Aug 27 2017, 20:15
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
VladislavS
сообщение Aug 28 2017, 07:01
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Интересно, как бедный линкер будет догадываться куда автоматически разместить переменные, если вы ему об этом не хотите говорить?

Кстати, надо аккуратней с размещением инициализированных данных во всяких "железных буферах". У них доступ бывает ограничен по разрядности. При копировании инициализирующих данных стартап код не знает про это ничего. Недавно пытался на STM32 в USB_PAM инициализированный массив разместить - не вышло, данные неправильно в него копируются.
Go to the top of the page
 
+Quote Post
grinux
сообщение Aug 30 2017, 18:06
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 2-01-09
Пользователь №: 42 891



Цитата(VladislavS @ Aug 28 2017, 10:01) *
Интересно, как бедный линкер будет догадываться куда автоматически разместить переменные, если вы ему об этом не хотите говорить?

Кстати, надо аккуратней с размещением инициализированных данных во всяких "железных буферах". У них доступ бывает ограничен по разрядности. При копировании инициализирующих данных стартап код не знает про это ничего. Недавно пытался на STM32 в USB_PAM инициализированный массив разместить - не вышло, данные неправильно в него копируются.


И не только инициализированных.
Например, только что случилось: функция записи IAP не работает, если данные для записи лежат в USB памяти. wacko.gif
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 18:10
Рейтинг@Mail.ru


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