Всем привет. Может кто-нибудь знает, как заставить линкер автоматически раскидывать 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
|