Microcontroladores ARM, el nuevo Cortex-M, han modos de operar, ya sea desde la RAM o ROM. Revisar, por ejemplo, BOOT0 y BOOT1 bits en STM32 del Manual de Referencia. Esta bastante configura la dirección de inicio de la ejecución en realidad un alias de la real direcciones de memoria en una memoria fija la dirección de segmento (0x0000 0000
a 0x0007 FFFF
).
El Cortex-M de core tiene cuatro tipos de memoria: RAM, ROM, flash y la Memoria del Sistema), FSMC y periférico. La memoria RAM es, así, el interior de memoria RAM estática. ROM flash interna o la unwritable incrustado gestor de arranque. FSMC permite el uso de la memoria externa (tanto RAM y ROM, en función de lo que el hardware externo es). Periféricos de memoria son registros específicos que se asignan a las funciones periféricas, como UARTs, Adc, etc. El hardware para acceder a ellas es independiente para ganar velocidad (Harvard-estilo), especialmente debido a que flash es más lento que el SRAM.
Sin embargo, todos los que son unificados en un único espacio de direcciones (Von Neumann-estilo), lo que hace que el acceso a ellos simplificada desde el punto de vista del programador. Sólo se diferencian por sus rangos de direcciones (depende de la implementación). El ARRANQUE de los pines de permitir la configuración de entre tres direcciones de inicio: uno en la memoria RAM, uno en la ROM (sólo lectura gestor de arranque) y otra en la ROM (memoria flash). Esto hace que sea posible para responder a su pregunta como "ambos". Nunca lo he intentado, pero parece que es posible saltar de un segmento a otro.
Tenga en cuenta, sin embargo, que los recuerdos no pueden ser tratadas por igual. Usted no puede arbitrariamente escribir a la ROM. Es flash, haciendo de ellos regrabable, pero debe utilizar un procedimiento especial para escribir en ellos (se le suele llamar algo así como "el uso de flash como memoria EEPROM" para almacenar los datos de programa, o "gestor de arranque" cuando el almacenamiento de código de programa, normalmente en el inicio).
Curioso info:
Cuando uno se ejecuta desde una memoria flash (ROM), las instrucciones se recuperan directamente desde la ROM. Por lo general hay algunas código de inicio que se copian los datos de la ROM a la RAM (inicializa las variables globales, normalmente se almacena en la sección de datos). El Manual de Referencia también lleva esta info
Cuando arranque de SRAM, en el código de inicialización de la aplicación, usted
tienen que reubicar la tabla de vectores de SRAM utilizando el NVIC excepción
la tabla y el desplazamiento de registro.
que es normalmente llevado a cabo por el código de inicio.