用STM32F401RE芯片,并在STM32CubeIDE上进行开发。 由于我在地址0x08000000处有一个Bootloader,因此需要将应用程序移到0x0800C000处,我修改了链接器文件: MEMORY { RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K /* FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 208K */ FLASH (rx) : ORIGIN = 0x0800C000, LENGTH = 208K } 在STM32CubeIDE下运行应用程序时,程序会崩溃,这似乎很明显是因为调试器需要正确初始化VTOR(向量表偏移寄存器)。 我已经注释掉了SystemInit()函数中初始化VTOR的那行代码。 void SystemInit(void) { /* FPU settings ------------------------------------------------------------*/ #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ #endif #if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) SystemInit_ExtMemCtl(); #endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ /* Configure the Vector Table location add offset address ------------------*/ #ifdef VECT_TAB_SRAM SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ #else // SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ #endif } 我想在“调试配置”|“启动”|“指定向量表(十六进制)”中直接填写0x0800C000,调试器就能初始化VTOR…… 下载程序并在Reset_Handler设置断点后,发现VTOR的值仍然是0。 有人知道如何将应用程序的地址更改为0x08000000以外的地址,同时还能正常调试吗?
|