Estoy escribiendo una pequeña aplicación para iniciar un gestor de arranque que comprueba condiciones simples y luego salta a la memoria de la aplicación. La aplicación parece estrellarse y no soy capaz de averiguar la razón y el depurador está lanzando:
Interrupción en la dirección "0x8000d00" sin información de depuración disponible, o fuera del código del programa.
Empecé el proyecto desde cero en STM32Cube IDE para el microcontrolador STM32F405 con 1Mb de flash. El gestor de arranque se inicia bien - parpadea un LED algunas veces y tiene que saltar a una aplicación que también parpadea el LED a diferentes frecuencias y lee la entrada del botón para cambiar el LED. En este momento, la secuencia del gestor de arranque se carga y luego se detiene - nada del código de la aplicación.
El gestor de arranque se encuentra en 0x08000000 y he asignado 64Kb. El espacio de la aplicación empieza en 0x08020000 y tiene asignados 768Kb.
Así es como estoy saltando al espacio de la aplicación desde el programa del cargador de arranque:
void (*app_reset_handler)(void) = (void*)(*((volatile uint32_t*) (0x08020000 + 4U)));
app_reset_handler();
En mi programa de aplicación, he definido el campo de la dirección base de la flash:
#define VECT_TAB_OFFSET 0x00020000U
y definió las definiciones de memoria para el flash:
FLASH (rx) : ORIGIN = 0x08020000, LENGTH = 768K
He seguido los mismos pasos para una implementación anterior en F401 que parece funcionar bien. ¿Alguna idea de cómo depurar este problema?