Hay algunas cosas que no entiendo sobre el proceso de arranque del microcontrolador STM32F4.
Mi entendimiento es el siguiente:
- Las botas ARM Cortex-M4 esperan el valor de inicialización del puntero de la pila y los vectores de interrupción activados
0x00000000 + SCB->VTOR
, mientras queSCB->VTOR
se borran al reiniciar. - No hay memoria en esa ubicación. La memoria flash comienza en
0x08000000
, SRAM en0x20000000
. - Para hacer posible el arranque, el µC puede asignar el rango de memoria flash o SRAM a
0x00000000
. El rango de memoria a mapear está definido por el estado de los pines de arranque.
Mis preguntas:
¿Por qué el manual de referencia STM32F4 dice en la página 69 que
Cuando el dispositivo se inicia desde SRAM, en el código de inicialización de la aplicación, debe reubicar la tabla de vectores en SRAM utilizando la tabla de excepciones NVIC y el registro de desplazamiento.
? En mi punto de vista, esto no es necesario, ya que la región de memoria completa tiene un alias de todos modos. Curiosamente, esto no parece ser necesario cuando la región flash se reasigna al
0x0
espacio.El único uso para arrancar desde SRAM que puedo pensar es reducir los ciclos de escritura en la memoria flash durante el desarrollo. Antes de liberar el µC del reinicio, escribe el programa en SRAM usando el depurador y luego inicia desde allí. Sin embargo, como tiene acceso al depurador, no habría restricciones sobre dónde iniciar de todos modos. Entonces, ¿por qué tener esta característica?
Que la posición de arranque se derive de los pines indica (al menos en mi opinión) que esta característica no se utilizará durante el desarrollo sino en la operación final. Y en la operación final, SRAM es clara en el momento del arranque. Por lo tanto, no tiene sentido arrancar desde SRAM.