Estoy desarrollando para STM32F0 usando Keil uVision.
Tengo un gestor de arranque personalizado cargado ejecutándose en la dirección 0x08000000. Necesito el cargador de arranque para saltar a mi aplicación principal que flasheo en la dirección 0x08003000. El objetivo final es permitir actualizaciones remotas de la aplicación principal. El código del gestor de arranque que salta a la aplicación es este:
__disable_irq();
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS+4);
Jump_To_Application = (pFunction) JumpAddress;
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
Jump_To_Application();
Recibo una falla grave en la línea Jump_To_Application(), con el mensaje "No se puede acceder a la memoria" dado por Keil.
Dentro de Keil, configuré la dirección de inicio de IROM1 en 0x08003000 en la configuración del proyecto de mi aplicación principal. Siento que el problema radica en algunas configuraciones adicionales dentro de Keil. Por ejemplo, ¿debería configurarse IROM2 en algo? ¿Debería ajustarse algo de los valores predeterminados en la configuración de Keil dentro del proyecto del gestor de arranque?
¿Alguien tiene alguna recomendación?
Tuve el mismo problema: lo resolví comentando estas líneas:
__disable_irq();
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
Algunos consejos para cualquiera que escriba un gestor de arranque por primera vez:
Convierte tu código en pequeñas secciones:
Debe volver a configurar el desplazamiento de la tabla de vectores. El desplazamiento es la dirección de inicio de su aplicación.
El código de su cargador de arranque debería verse así:
__disable_irq();
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS+4);
Jump_To_Application = (pFunction) JumpAddress;
SCB->VTOR = APPLICATION_ADDRESS;
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
Jump_To_Application();
Y si usó STM32CubeMX para generar su código, debe agregar la misma línea de código al comienzo de main() de su aplicación:
SCB->VTOR = APPLICATION_ADDRESS;
Debido a que el sistema reinicia el desplazamiento de la tabla de vectores, el desplazamiento debe reconfigurarse apuntando a la dirección de inicio de su aplicación.
Batuu
rfkortekaas
máximo
máximo