Llene la ROM con las instrucciones de salto

0

Como he escuchado, es una práctica común llenar la memoria flash no utilizada de un microcontrolador con una instrucción de salto a la función de reinicio. Esto ayuda a restablecer el MCU en caso de que la PC esté dañada, más rápido que la expiración del temporizador de vigilancia.

Actualmente estoy interesado en los microcontroladores ARM Cortex-M. ¿Cuál es la instrucción que necesito? Cómo convertirlo en hexadecimal para colocarlo en el script del vinculador, ¿cómo puedo definir la dirección de salto que deseo?

¿Cuáles son las modificaciones necesarias en el script del vinculador?

    
pregunta user3634713

2 respuestas

1

Las instrucciones de salto son relativas a la PC en Cortex M y necesitarían 32 bits a menos que tu flash sea realmente pequeño.

Una mejor idea sería el "código permanentemente INDEFINIDO" código de instrucción 0xDE00 o 0xDEDE - todos los 16- Las instrucciones de bit 0xDEXX activarán la función del controlador UsageFault. Consulte Relleno de la sección de salida en el manual de LD.

Personalmente no me molestaría:

  • Sin el Thumb-Bit, todas las direcciones par activan automáticamente un fallo mientras se cargan en la PC
  • Una parte grande del espacio de direcciones de 32 bits no está ni cubierta por la memoria flash
  • La PC no debe modificarse "al azar" a menos que estemos hablando de SEU en un entorno altamente radioactivo
respondido por el Turbo J
1

En un Cortex, saltar a la dirección 0 es NO equivalente a restablecer el chip. Las direcciones inferiores contienen los vectores de restablecimiento, y las dos primeras direcciones contienen específicamente los valores iniciales de PC y SP. No instrucciones, valores. Por lo tanto, no puede saltar a 0 y esperar que suceda algo significativo.

Tenga en cuenta que incluso en un chip que comienza a ejecutarse desde una instrucción en la dirección 0, saltar a 0 no restablecería todo tipo de CPU y estado periférico, aún no es equivalente a un restablecimiento.

    
respondido por el Wouter van Ooijen

Lea otras preguntas en las etiquetas