对于「引导程序+应用程序」之类的方案,我们通常是在系统初始化函数(SystemInit())中配置中断向量表偏移寄存器来实现中断向量表的重定向。但是这种直接修改官方库的方式往往会给后期的版本管理带来诸多不便。基于此,本文给出一个替代方案,供诸位参考。
vtor.c#include "xxx32xxxx.h"
#define VECTOR_TABLE_OFFSET ((uint32_t)0x00018000)
#define ROM_BASE ((uint32_t)0x08000000) #define RAM_BASE ((uint32_t)0x20000000)
void SystemVTOR(void) { #ifdef EXECUTE_IN_RAM SCB->VTOR = RAM_BASE | VECTOR_TABLE_OFFSET; #else SCB->VTOR = ROM_BASE | VECTOR_TABLE_OFFSET; #endif }
|
startup_xxx32xxxx.sReset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT SystemVTOR IMPORT SystemInit IMPORT __main
LDR R0, =SystemVTOR BLX R0 LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP
|