Как использовать внешнюю память на микроконтроллере

В прошлом я много работал с 8-разрядными AVR и MSP430, где и оперативная память, и флэш-память хранились непосредственно на чипе. Когда вы компилируете и загружаете свою программу, она как бы "просто работает", и вам не нужно беспокоиться о том, где и как на самом деле хранятся переменные.

Сейчас я начинаю проект, в котором я хотел бы иметь возможность добавить внешнюю память к микроконтроллеру (TI Stellaris LM3S9D92, если это имеет значение), но я не совсем уверен, как заставить ваш код использовать внешнюю оперативную память. Я вижу, как вы настраиваете внешнюю шину, как и любую другую периферию, но меня смущает то, как процессор отслеживает, когда нужно обращаться к внешней памяти, а когда к внутренней.

Насколько я могу судить, внешняя оперативная память отображается на то же адресное пространство, что и внутренняя SRAM (внутренняя начинается с 0x20000000, а внешняя - с 0x60000000). Значит ли это, что если я напишу что-то вроде этого:

int* x= 0x20000000;
int* y= 0x60000000;

Будут ли x и y указывать на первые 4 байта (предполагается, что 32-битные инты) внутренней и внешней оперативной памяти соответственно? Если да, то что если я сделаю что-то вроде этого:

int x[999999999999]; //some super big array that uses all the internal ram
int y[999999999999]; //this would have to be in external ram or it wouldn't fit

Я представляю, что мне нужно будет сказать что-то о границах каждого типа памяти или я все делаю неправильно, и аппаратура сама разберется с этим? Занимаются ли этим скрипты компоновщика? Я знаю, что они имеют отношение к отображению памяти, но не знаю, что именно. После чтения о том, как настроить кросс-компилятор ARM, у меня появилось ощущение, что что-то вроде winavr (avr-gcc) делает многое из этого за кулисами, чтобы мне не пришлось с этим возиться.

Извините, что немного сумбурно, но я был бы очень признателен, если бы кто-нибудь подсказал мне, на правильном ли я пути.

Обновление

Для всех будущих читателей я нашел это после еще нескольких часов гугления http://www.bravegnu.org/gnu-eprog/index.html. В сочетании с ответами здесь это мне очень помогло.

20
задан nightrain 10 February 2012 в 17:39
поделиться