Antes de que puedas empezar a ejecutar código desde la RAM externa, tienes que inicializar primero el FSMC y copiar tu código en esa RAM, así que tienes que arrancar desde la flash de todos modos. Un linker script correctamente escrito (con una sección de código adicional enlazada en la dirección correcta pero colocada en flash, como la sección .data) ayudará mucho. Podrás marcar las funciones que necesites colocadas en la RAM con un correcto atributo de sección . Después de inicializar el FSMC, copie esa sección en la RAM de la misma manera que se copian los datos en su código de inicio. Todo lo que queda es llamar a sus funciones de RAM de manera normal.
Hay que tener en cuenta dos problemas serios con la ejecución desde una SRAM externa:
-
Va a ser lento. Como 6...8 veces más lento que si se ejecuta desde la flash o incluso desde la SRAM interna según este . Esta arquitectura de microcontrolador simplemente no está optimizado para este tipo de uso .
-
Algunos chips STM32 tienen un error de silicio en el que el acceso a FSMC por parte de dos maestros de bus bloquea el chip. Esto básicamente le impedirá utilizar DMA. Esto afecta al STM32F103 revisión Y, probablemente a otros chips también.
Así que yo no haría esto personalmente. Una vez más tengo que repetir en este sitio web que microcontrolador != CPU incluso si es un ARM.