В прошлом я много работал с 8-битными AVR и MSP430, где оперативная память и флэш-память были сохранены непосредственно на чипе. Когда вы компилируете и загружаете свою программу, это "просто работает", и вам не нужно беспокоиться о том, где и как фактически хранятся переменные.
Теперь я начинаю проект, где хочу добавить некоторую внешнюю память в микроконтроллер (TI Stellaris LM3S9D92, если это имеет значение), но я не совсем уверен, как вы получаете свой код для использования внешняя оперативная память. Я вижу, как вы настраиваете внешнюю шину в значительной степени, как и любую другую периферию, но меня смущает то, как процессор отслеживает, когда нужно разговаривать с внешней памятью и когда разговаривать с внутренним.
Из того, что я могу сказать, внешняя оперативная память сопоставляется с тем же адресным пространством, что и внутренний SRAM (внутренний начинается с 0x20000000, а внешний начинается с 0x60000000). Означает ли это, если бы я написал что-то вроде этого:
int* x= 0x20000000;
int* y= 0x60000000;
Будет ли x и y указывать на первые 4 байта (предположительно 32-битные int) внутреннего и внешнего RAM соответственно? Если да, то что, если бы я сделал что-то вроде этого:
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) делает для меня что-то вроде этого за кулисами, поэтому мне не пришлось бы с этим справляться.
Извините за бессвязную битку, но я бы очень признателен, если бы кто-нибудь сказал мне, если я нахожусь на правильном пути с этим материалом.
Обновление
Для любых будущих читателей я нашел это после нескольких часов работы в googling http://www.bravegnu.org/gnu-eprog/index.html. В сочетании с ответами здесь это очень помогло мне.