Ejecutando ejecutable desde una SRAM externa

6

Tengo una placa de desarrollo STM32 con algún SRAM externo. Me gustaría ejecutar mi código desde esa SRAM externa, pero mi procesador solo admite el arranque desde Flash, SRAM interna o memoria del sistema (una parte de la SRAM interna).

¿Cuál es la forma más fácil de ejecutar código desde una SRAM externa?

Notas: cargo código con OpenOCD a través de JTAG, y uso GDB.

    
pregunta Randomblue

1 respuesta

14

Antes de que puedas comenzar a ejecutar código desde la RAM externa, primero debes inicializar FSMC y copiar tu código en esa RAM, así que tienes que arrancar desde flash de todos modos. Un script de enlace correctamente escrito (con una sección de código adicional vinculada a la dirección correcta pero colocada en flash, como la sección .data) será de gran ayuda. Podrá marcar las funciones que necesita ubicadas en la RAM con un atributo de sección . Una vez que se haya inicializado 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 una manera normal.

Tenga en cuenta dos problemas graves al ejecutar desde una SRAM externa:

  1. Va a ser lento. Como 6 ... 8 veces más lento que ejecutar desde flash o incluso SRAM interno de acuerdo con esto . Esta arquitectura de microcontrolador simplemente no está optimizada para este tipo de uso .

  2. Algunos chips STM32 tienen un error de silicio donde el acceso FSMC de dos maestros de bus bloquea el chip. Básicamente, esto evitará que uses DMA. Esto se refiere a la revisión Y IIRC del STM32F103, probablemente también a otros chips.

Así que no haría esto personalmente. Una vez más, tengo que repetir en este sitio web que el microcontrolador! = CPU, incluso si se trata de un BRAZO.

    
respondido por el Thorn

Lea otras preguntas en las etiquetas