¿pila ejecutable STM32F4?

0

¿Es ejecutable la pila en el MCU STM32F4? Quiero hacer esto:

 unsigned int buffer[3];
 buffer[0] = 0x10000FA5; //Address: 0x10000FA0
 buffer[1] = 0xA0E1; //Address: 0x10000FA4 NOP
 buffer[2] = 0xA0E1; //Address> 0x10000FA8 NOP
 __asm __volatile__
 (
   "movw R1, #0x0fa0\n"  
   "movt R1, #0x1000\n" 
   "ldr pc, [r1, #0]\n" 
 );

En el código de ensamblaje, obtengo el contenido en la dirección 0x10000fa0 (búfer [0]) para obtener mi nuevo contador de programas. El nuevo contador del programa es 0x10000FA5, que es la dirección del contenido del búfer [1]. En el búfer [1] ahora hay una instrucción (NOP) guardada. ¿Es posible ejecutar esto?

Editar: Lo probé con GDB pero obtengo la siguiente excepción: prvGetRegistersFromStack (pulFaultStackAddress = 0x10000f78) de FreeRTOS

    
pregunta who93

3 respuestas

2

El stm32 puede ejecutarse felizmente desde la RAM, así que sí, esto es posible. Dependiendo de la variante de STM32F4, hay diferentes secciones de SRAM adjuntas al bus I, esto se detalla en el manual de referencia de su parte.

¿Por qué quieres hacer esto? ¿Qué problema estás tratando de resolver?

Si está intentando ejecutar código desde la RAM, hay formas bien definidas de lograrlo con el vinculador.

    
respondido por el Colin
1

Creo que esto debería funcionar. Pero tenga en cuenta que probablemente no pueda simplemente hacer un BL desde RAM a FLASH o viceversa porque la distancia es demasiado grande (mucho mayor que la distancia máxima dentro de RAM o FLASH).

He utilizado algo similar a esto para escribir un bucle de retardo temporizado (en LPC2148 IIRC) porque la temporización de RAM es mucho más predecible que la temporización FLASH (debido a los estados de espera, lectura de búfer, alineación, etc.)

    
respondido por el Wouter van Ooijen
1

Es posible proteger la pila contra la ejecución usando la Unidad de Protección de Memoria (MPU) del Cortex-M4, pero esto rara vez se hace. Entonces sí, generalmente debería ser posible ejecutar código en la pila.

    
respondido por el starblue

Lea otras preguntas en las etiquetas