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 контроллер.