He escrito un bootloader antes para un STM32 que tenía soporte para el vector offset y es fácil de usar.
Para STM32F0xx usando HAL, leo que necesito mover la tabla de vectores para grabar y copiar desde flash. He hecho hasta donde sé todos los pasos descritos aquí:
Puedo saltar del cargador de arranque a la aplicación, pero en el momento en que se produce una interrupción, se bloquea.
Sin embargo, lo ÚNICO que no he hecho es usar el script del vinculador. He cambiado como sigue la configuración:
Yheseleccionado"Diseño de memoria de usuario desde dialgo de destino" en Vinculador en la configuración del proyecto. Si trato de usar el script del enlazador simplemente escribiendo):
MEMORY
{
VTRAM (xrw) : ORIGIN = 0x20000000, LENGTH = 192
RAM (xrw) : ORIGIN = 0x200000C0, LENGTH = 32K-192
FLASH (rx) : ORIGIN = 0x8008000, LENGTH = 256K-32K
}
Me sale el error:
*** Using Compiler 'V5.06 update 5 (build 528)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Build target 'Target 1'
linking...
.\Objects\DimmerBackend.axf: Warning: L6914W: option ropi ignored when using --scatter.
.\Objects\DimmerBackend.axf: Warning: L6914W: option rwpi ignored when using --scatter.
.\App2.sct(2): error: L6226E: Missing base address for region MEMORY.
.\App2.sct: Error: L6630E: Invalid token start expected number or ( but found x at position 8 on line 3
.\App2.sct: Error: L6629E: Unmatched parentheses expecting ) but found x at position 8 on line 3
.\App2.sct: Error: L6226E: Missing base address for region VTRAM.
.\App2.sct(3): error: L6292E: Ignoring unknown attribute 'xrw' specified for region VTRAM.
.\App2.sct(3): error: L6228E: Expected '{', found ')...'.
.\App2.sct(3): error: L6228E: Expected '}', found 'EOF'.
Not enough information to list image symbols.
Not enough information to list load addresses in the image map.
Finished: 2 information, 2 warning and 7 error messages.
".\Objects\DimmerBackend.axf" - 7 Error(s), 2 Warning(s).
Target not created.
Build Time Elapsed: 00:00:02
Sin el script del enlazador puedo ir a la aplicación pero fallar en las interrupciones. Por lo tanto, asumo que de alguna manera se necesita este mágico VTRAM misterioso.
Mis preguntas son entonces:
- ¿Qué es este VTRAM?
- ¿Por qué no puedo usar ese script de vinculador?
- ¿Cómo se genera automáticamente un script de vinculador? No creo que la gente las escriba por sí mismas.