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

 
 
> Как в программе разместить большой массив в 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, 10:57
Сообщение #2


Знающий
****

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



1) И вообще какие ограничения накладывает IAR на размер массивов?

Согласно адресного пространства и типа указателя, для ARM это 32 бит

2) С какого адреса начинается адресное пространство SDRAM?

Вы хоть мануал на процессор открывали ? там все написано

3) Надо в линкер файле добавить следующее

Код
define symbol REGION_SDRAM_start  = 0хххххх; //адрес начала памяти
define symbol REGION_SDRAM_end   = 0xххххх; //адрес конца памяти  


//обьявляем регион для SDRAM
define region SDRAM_region = mem:[from REGION_SDRAM_start to REGION_SDRAM_end];


//говорим какие секции туда положить
place in SDRAM_region {section .my};


//если SDRAM инициализируется после low_level_init тогда делаем всю память не инициализируюмую иначе ппц будет, в этом случае нельщзя ложить секции которые требуют инициализации

do not initialize  { section .my };


Вот теперь можно пользоваться

Код
#pragma location=".my"
my_array_in_SDRAM[SIZE];


Здесь __no_init убирается и переносится на плечи линкера, более крос платформенный подход.

P.S. И не забудьте вовремя и правильно инициализировать SDRAM контроллер.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 06:04
Рейтинг@Mail.ru


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