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

 
 
> Как в программе разместить большой массив в SDRAM?
kolobochishe
сообщение Dec 2 2010, 10:45
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



Товарищи smile.gif Объясните как разместить массив размером 10x10^6 во внешней SDRAM?

Плата LPC-2478STK. 64МБ SDRAM.

Пробовал задавать статический массив. Компилятор "съедает", но программа "виснет" при инициализации файловой системы и графики.

Также был тут уже вопрос - как узнать сколько ресурсов "съедает" RTOS PowerPac?
И вообще какие ограничения накладывает IAR на размер массивов? С какого адреса начинается адресное пространство SDRAM? Хочу использовать следующее:


#pragma location="адрес"
__no_init "объявление структуры"

Взято отсюда

#pragma location=0xXXXXXXXXX // Какой то адрес в SDRAM
__no_init U16 MyArray[10000000];
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MALLOY2
сообщение Dec 2 2010, 12:22
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



1.RAM_region я у вас в линкере не SDRAM регион, но если вы адреса RAM_region перенесли на адреса SDRAM тогда надо написать так

Код
place in RAM_region { readwrite, block HEAP, sectoin MyData }; // Было до меня


Цитата
ЗАРАБОТАЛО!


Здается мне что рано радуетесь smile.gif
Go to the top of the page
 
+Quote Post
kolobochishe
сообщение Dec 2 2010, 12:43
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



[quote name='MALLOY2' date='Dec 2 2010, 17:22' post='848774']

Код
place in RAM_region { readwrite, block HEAP, sectoin MyData }; // Было до меня


Код
define symbol __ICFEDIT_region_RAM_start__  = 0xA0000000;           // 32MByte SDRAM
define symbol __ICFEDIT_region_RAM_end__    = 0xA3FFFFFF;
define symbol __ICFEDIT_region_iRAM_start__ = 0x40000000;
define symbol __ICFEDIT_region_iRAM_end__   = 0x4000FFFF;

place in RAM_region   { readwrite, block HEAP };

place in iRAM_region  { block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,
                        block UND_STACK, block ABT_STACK };


iRAM - внутреннее ОЗУ, как я понял
RAM - внешнее. Кучу программисты из IAR поместили в RAM. Которая, как я понял, и есть нужная мне SDRAM. По диапазону адресов совпадает

И вообще, что-то я совсем запутался. Работает и без всего этого. Просто объявил массив глобально. Похоже в RTOS есть какие-то ограничения на размер массива для конкретной задачи. Потому как локально объявленный массив не работал.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:50
Рейтинг@Mail.ru


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