Estoy usando una placa LPC 1768 de mbed, (con córtex M3 cpu) y estoy tratando de lograr algo aquí, principalmente actualizo la aplicación de usuario desde la tarjeta SD, estoy escribiendo dos programas, primero un gestor de arranque/nano-núcleo, y un usuario de la aplicación (holamundo va a hacer por un comienzo):Bootloader for Cortex M3
- gestor de arranque/nano-kernel en el 0x00 carreras de dirección, que va a hacer algunas comprobaciones y, finalmente, agarrar el archivo binario en el SD tarjeta
- Bootloader/nano-kernel copiará este binario en la dirección 0x9000 (que podría tener que cambiar más tarde, pero este espacio no es usado por el bootloader/nano-kernel así que debería estar bien)
- Bootloader salta a la aplicación de usuario en 0x9000 + 4
La tarjeta Sd es bastante fácil de resolver, tengo problemas con la parte de salto. Aquí está el código de la función de salto.
void run(void) {
void (*user_code_entry)(void);
unsigned *p;
SCB->VTOR = (USER_FLASH_START & 0x1FFFFF80);
// Load contents of second word of user flash - the reset handler address
// in the applications vector table
p = (unsigned *)(USER_FLASH_START +4); // USER_FLASH_START is 0x9000
user_code_entry = (void (*)(void))p;
// Jump to user application
user_code_entry();
}
Así que he recopilado (estoy usando Keil uvision4) la aplicación de usuario cambiar la dirección de inicio a 0x9000. Si programo mi placa (usando flashmagictool), y luego salto manual (todavía usando flashmagictool) a 0x9004 (0x9000 + 4), la aplicación de usuario se ejecutará, así que creo que la compilación ha funcionado bien para que user-app pueda ejecutarse en 0x9000.
Pero si ejecuto el gestor de arranque/nano-kernel, este no salta a la aplicación de usuario y, lamentablemente, como no puedo depurar, no estoy seguro de lo que está pasando ... También he intentado no use la parte de copia SD, así que programo el gestor de arranque primero, básicamente con el salto a 0x9004. Luego programo la aplicación de usuario que se ubicará en 0x9000. Si reinicio la placa, el gestor de arranque se ejecuta pero no salta a la aplicación del usuario. Revisé la memoria y parece que ambos programas (gestor de arranque + aplicación de usuario) son correctos y están en el lugar correcto.
Estoy seguro de que me falta algo aquí, ¿hay algún código de bajo nivel que debería estar mirando? He leído tonos de documentos en línea, y de los ejemplos que he encontrado, están saltando al código de usuario de la misma manera que yo ... Muchas gracias por cualquier ayuda.
esto debería funcionar bastante similares en su PC también, pero con direcciones virtuales, en lugar de física - probarlo y ver si funciona, entonces mover el código a Keil – Ulterior
Cortex M3 no tiene MMU, por lo que no hay direcciones virtuales. –