|
ILINK и куски RAM по разным адресам |
|
|
|
Aug 27 2017, 20:12
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Aug 28 2017, 06:54
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(grinux @ Aug 27 2017, 23:12)  Может кто-нибудь знает, как заставить линкер автоматически раскидывать rw данные по памяти, состоящей, например, у NXP LPC23xx из трех кусков. Код define region RAM_regionA = mem:[from 0x1FFE8000 size 0x18000]; //PSRAM (code) define region RAM_regionB = mem:[from 0x20000000 size 0x20000]; //DSRAM1 (RW-data) define region RAM_regionC = mem:[from 0x20020000 size 0x20000]; //DSRAM2 (RW-data) ... place in RAM_regionB | RAM_regionC {rw, first block CSTACK, section .raw, block HEAP}; PS: Неужто кто-то ещё пишет новое ПО для столь старого МК??
|
|
|
|
|
Aug 28 2017, 20:03
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 2-01-09
Пользователь №: 42 891

|
Цитата(jcxz @ Aug 28 2017, 09:54)  Код define region RAM_regionA = mem:[from 0x1FFE8000 size 0x18000]; //PSRAM (code) define region RAM_regionB = mem:[from 0x20000000 size 0x20000]; //DSRAM1 (RW-data) define region RAM_regionC = mem:[from 0x20020000 size 0x20000]; //DSRAM2 (RW-data) ... place in RAM_regionB | RAM_regionC {rw, first block CSTACK, section .raw, block HEAP}; PS: Неужто кто-то ещё пишет новое ПО для столь старого МК??  Спасибо, то что нужно. Новое не пишет, а старое развивается и поджирает память потихоньку. Цитата(VladislavS @ Aug 28 2017, 10:01)  Интересно, как бедный линкер будет догадываться куда автоматически разместить переменные, если вы ему об этом не хотите говорить?
Кстати, надо аккуратней с размещением инициализированных данных во всяких "железных буферах". У них доступ бывает ограничен по разрядности. При копировании инициализирующих данных стартап код не знает про это ничего. Недавно пытался на STM32 в USB_PAM инициализированный массив разместить - не вышло, данные неправильно в него копируются. Спасибо, буду иметь ввиду.
|
|
|
|
Сообщений в этой теме
grinux ILINK и куски RAM по разным адресам Aug 27 2017, 20:12 VladislavS Интересно, как бедный линкер будет догадываться ку... Aug 28 2017, 07:01 grinux Цитата(VladislavS @ Aug 28 2017, 10:01) И... Aug 30 2017, 18:06 Obam Чётко по требуемым адресам и в требуемой последова... Aug 28 2017, 08:04 VladislavS Ну тут то всё в ваших руках - делайте как написано... Aug 30 2017, 18:40 grinux Цитата(VladislavS @ Aug 30 2017, 21:40) Н... Aug 30 2017, 18:45  jcxz Цитата(grinux @ Aug 30 2017, 21:45) char ... Aug 30 2017, 21:00 VladislavS Разместить не проблема. Главное правильно писать/ч... Aug 30 2017, 18:56
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|