En el pasado, he trabajado mucho con AVR de 8 bits y MSP430 donde la RAM y el flash se almacenaban en el chip directamente. Cuando compila y descarga su programa, de alguna manera "simplemente funciona" y no necesita preocuparse acerca de dónde y cómo se almacenan realmente las variables.Cómo utilizar la memoria externa en un microcontrolador
Ahora estoy comenzando un proyecto en el que me gustaría poder agregar algo de memoria externa a un microcontrolador (un TI Stellaris LM3S9D92 si eso importa) pero no estoy del todo seguro de cómo se usa el código. la RAM externa. Puedo ver cómo se configura el bus externo más o menos como cualquier otro periférico, pero lo que me confunde es cómo el procesador realiza un seguimiento de cuándo hablar con la memoria externa y cuándo hablar con la interna.
Por lo que puedo decir, la RAM externa se asigna al mismo espacio de direcciones que la SRAM interna (la interna se inicia en 0x20000000 y la externa se inicia en 0x60000000). ¿Eso significa que si escribía algo como esto:
int* x= 0x20000000;
int* y= 0x60000000;
¿Sería x e y apuntaría a los primeros 4 bytes (suponiendo 32 bits enteros) de memoria RAM interna y externa, respectivamente? Si es así, ¿y si he hecho algo como esto:
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
Imagino que me había necesidad de decir algo acerca de los límites de que cada tipo de memoria es o tengo todo mal y el hardware lo descubre por sí mismo? ¿Los scripts del enlazador lidian con esto? Sé que tienen algo que ver con el mapeo de la memoria, pero no sé exactamente qué hacer. Después de leer acerca de cómo configurar un compilador cruzado ARM me da la sensación de que algo como winavr (avr-gcc) estaba haciendo muchas cosas como esta detrás de escena para no tener que lidiar con eso.
Perdón por dar vueltas un poco, pero realmente agradecería que alguien pudiera decirme si estoy en el camino correcto con estas cosas.
actualización
Para cualquier futuros lectores que encontré esto después de unas horas de googlear http://www.bravegnu.org/gnu-eprog/index.html. Combinado con las respuestas aquí me ayudó mucho.
Es posible que desee preguntar en http://electronics.stackexchange.com/. También es posible que desee consultar la [hoja de datos de Stellaris] (http://www.ti.com/lit/ds/spms257a/spms257a.pdf). –