gopher 0 13 февраля, 2008 Опубликовано 13 февраля, 2008 · Жалоба В проекте используется lpc2378. Ни ETHERNET ни USB не используется. Возможно ли использовать ETHERNET RAM (16 kB) и USB RAM (8 KB) как обычную ОЗУ? Если да, то как это сделать? Для разработки используется keil + GCC, как я понимаю надо править LinkerScript.ld, но я не понял как указать для секции DATA два участка памяти. Какие будут мысли по этому поводу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 13 февраля, 2008 Опубликовано 13 февраля, 2008 · Жалоба В проекте используется lpc2378. Ни ETHERNET ни USB не используется. Возможно ли использовать ETHERNET RAM (16 kB) и USB RAM (8 KB) как обычную ОЗУ? Не забудьте посмотреть ERRATA, там есть ограничения и особенности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 13 февраля, 2008 Опубликовано 13 февраля, 2008 (изменено) · Жалоба В проекте используется lpc2378. Ни ETHERNET ни USB не используется. Возможно ли использовать ETHERNET RAM (16 kB) и USB RAM (8 KB) как обычную ОЗУ? Если да, то как это сделать? Для разработки используется keil + GCC, как я понимаю надо править LinkerScript.ld, но я не понял как указать для секции DATA два участка памяти. Какие будут мысли по этому поводу? Использовать можно, только GPDMA не имеет доступа к Ethernet RAM. Кейлом не пользуюсь. Самый простой вариант, если нужно там размещать большие буфера, то можно сделать вот так, и контроллировать все в ручную: int main() { DWORD *pBuf = 0x7FE00000; // указатель на буфер в памяти Ethernet DWORD Data; *pBuf = 0x01020304; Data = *pBuf; // Data = 0x01020304 } Изменено 13 февраля, 2008 пользователем Vitaliy_ARM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 14 февраля, 2008 Опубликовано 14 февраля, 2008 · Жалоба Самый простой вариант... Самый простой - сказать линкеру, что у него два блока RAM - пусть линкует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gopher 0 14 февраля, 2008 Опубликовано 14 февраля, 2008 · Жалоба Самый простой - сказать линкеру, что у него два блока RAM - пусть линкует. вот я и спрашиваю, как это объяснить линкеру. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TanT 0 27 марта, 2009 Опубликовано 27 марта, 2009 (изменено) · Жалоба Самый простой - сказать линкеру, что у него два блока RAM - пусть линкует. Уважаемый Игорь, тема конечно старая, но действительно: как объяснить линкёру что у него два блока RAM? В частности в файле .xcl это можно оформить. (использую IAR) Изменено 27 марта, 2009 пользователем TanT Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HARMHARM 0 27 марта, 2009 Опубликовано 27 марта, 2009 · Жалоба Как объяснить линкёру что у него два блока RAM? В частности в файле .xcl это можно оформить. (использую IAR) -DRAMSTART=40000040 -DRAMEND=40007FDF -DETHRAMSTART=7FE00000 -DETHRAMEND=7FE03FFF -Z(DATA)DATA_I,DATA_Z,DATA_N=RAMSTART-RAMEND,ETHRAMSTART-ETHRAMEND Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lebiga 0 30 марта, 2009 Опубликовано 30 марта, 2009 · Жалоба IAR 5xx lpc23xxx.icf ... 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__]; do not initialize { section USB_DMA_RAM }; // не инициализировать - это если нужно... do not initialize { section EMAC_DMA_RAM }; place in USB_DMA_RAM_region { readwrite data section USB_DMA_RAM }; place in EMAC_DMA_RAM_region { readwrite data section EMAC_DMA_RAM }; в файле *.с #pragma segment="USB_DMA_RAM" #pragma location="USB_DMA_RAM" #pragma data_alignment=4 long buffer[2048]; // 8192 байт или char buffer[8192]; // 8192 байт Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться