Pregunta

Me gustaría tener dos aplicaciones en mi flash STM32, una es básicamente un arranque y la otra la aplicación 'principal'. He descubierto cómo cargar cada una de ellas en diferentes áreas de flash, y después de tomar un volcado de memoria todo parece estar en el lugar correcto.

Entonces, cuando hago un reinicio, se carga el arranque, todo lo que hace el arranque en este momento es saltar a la aplicación. Depurando el arranque, todo esto parece funcionar correctamente. Sin embargo, los problemas llegan después de que he dado el salto a la aplicación, simplemente ejecuta una instrucción (ensamblaje) y luego vuelve al inicio. Debería permanecer en la aplicación por tiempo indefinido.

Mi pregunta es entonces, ¿a dónde debo 'saltar' en la aplicación?

Parece que hay algunos puntos potenciales, como los vectores de interrupción, el controlador de reinicio, la función principal de la aplicación. En realidad, he probado todos aquellos sin éxito.

Esperemos que tenga sentido, actualizaré la pregunta si no.

gracias por tu ayuda! Richard

Actualizaciones:

  • Tuve un juego en el depurador y cambié manualmente el contador del programa a la parte principal de la aplicación, y bueno, funcionó de forma encantadora, así que me hace pensar que hay un problema con mi salto, ¿por qué no funciona el programa? Contador seguir adelante después del salto?
  • En realidad parece ser el PSR, la 'T' se restablece en el salto, si lo configuro nuevamente después del salto, continúa con la aplicación como deseo
  • Ok encontró una solución, parece que necesita tener el PC LSB configurado en 1 cuando hace una bifurcación o cae en el modo 'ARM' (instrucción de 32 bits en lugar de instrucciones de 16 bits como en el modo 'pulgar') Un problema bastante oscuro, ¡gracias por permitirme compartirlo con ustedes!
¿Fue útil?

Solución

Asegúrese de saltar a una dirección donde el LSB es 1. Consulte este sitio para obtener una explicación: http://www.embedded.com/columns/beginerscorner/15200241?_requestid=162471

Otros consejos

Es posible que desee buscar el IAP (programador en la aplicación) que le permite arrancar el código desde el psort RS232 en el stm32. Comencé a usarlo y, dado que proporciona el código fuente, es muy sencillo modificarlo para sus propósitos. Básicamente, después de un reinicio, puede codificar el IAP para cargar desde la dirección 0x08002000 o la dirección 0x08003000. entonces todo lo que tiene que hacer es establecer un indicador en el código de su aplicación, luego decir reiniciar y la nueva aplicación se ejecutará. Espero que esto ayude.

Richard,

Estaba tratando de hacer lo mismo que tu lograste, pero estaba teniendo problemas. Estaba usando el IDE de IAR y actualicé el archivo * .icf (en el directorio " proj ") para poner mi aplicación en 0x08002000 y cargué un proyecto separado en 0x08000000 que solo hace un salto a la dirección en el vector de restablecimiento en 0x08002004. El código de inicio se inició y parece saltar al inicio de la aplicación, pero la aplicación falló en algún momento durante la inicialización de IAR, terminando en una trampa de INSTRUCCIÓN ILEGAL.

Después de un solo paso a través del código de la aplicación, encontré que olvidé establecer la dirección base del vector de interrupción a la de la aplicación. Seguía apuntando a 0x08000000 y, por lo tanto, el código se volvió loco. Agregar una llamada para establecer la dirección del vector antes de habilitar cualquier interrupción solucionó mi problema y es necesario si desea que una aplicación cambie en flash.

Ira.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top