GD32 Embedded Bulider怎么设置程序偏移地址
#技术资源#如题,GD32 Embedded Bulider怎么设置程序偏移地址?我使用的是GD32D303RE,需求是OTA升级。目前使用keil的程序都能跑通,但是转到GD的IDE就不行。
我已修改(1)flash.ld中的 FLASH (rx) : ORIGIN = 0x0800E000, LENGTH = 456K;(2)system_gd32f30x.c中加了
#define VECT_TAB_OFFSET(uint32_t)0xE000 /* vector table base offset */
#ifdef VECT_TAB_SRAM
nvic_vector_table_set(NVIC_VECTTAB_RAM, VECT_TAB_OFFSET);
#else
nvic_vector_table_set(NVIC_VECTTAB_FLASH, VECT_TAB_OFFSET);
#endif
请问我还需要修改哪些部分?
在启动文件中(如startup_gd32f30x.s或类似文件),需要定义向量表的偏移量 本帖最后由 rui911 于 2024-11-5 11:15 编辑
你好,我看md_S文件中已经调用SystemInit了,我在该函数中已设置向量表偏置。我这样设置过了,请问该程序还是不能启动(在0x0800E000地址上。(我有bootloade程序跳转至该地址)
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
/* reset the RCU clock configuration to the default reset state */
/* Set IRC8MEN bit */
RCU_CTL |= RCU_CTL_IRC8MEN;
while(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){
}
RCU_MODIFY(0x50);
RCU_CFG0 &= ~RCU_CFG0_SCS;
#if (defined(GD32F30X_HD) || defined(GD32F30X_XD))
/* reset HXTALEN, CKMEN and PLLEN bits */
RCU_CTL &= ~(RCU_CTL_PLLEN | RCU_CTL_CKMEN | RCU_CTL_HXTALEN);
/* disable all interrupts */
RCU_INT = 0x009f0000U;
#elif defined(GD32F30X_CL)
/* Reset HXTALEN, CKMEN, PLLEN, PLL1EN and PLL2EN bits */
RCU_CTL &= ~(RCU_CTL_PLLEN |RCU_CTL_PLL1EN | RCU_CTL_PLL2EN | RCU_CTL_CKMEN | RCU_CTL_HXTALEN);
/* disable all interrupts */
RCU_INT = 0x00ff0000U;
#endif
/* reset HXTALBPS bit */
RCU_CTL &= ~(RCU_CTL_HXTALBPS);
/* Reset CFG0 and CFG1 registers */
RCU_CFG0 = 0x00000000U;
RCU_CFG1 = 0x00000000U;
/* configure the system clock source, PLL Multiplier, AHB/APBx prescalers and Flash settings */
system_clock_config();
#ifdef VECT_TAB_SRAM
nvic_vector_table_set(NVIC_VECTTAB_RAM, VECT_TAB_OFFSET);
#else
nvic_vector_table_set(NVIC_VECTTAB_FLASH, VECT_TAB_OFFSET);
#endif
}
tpgf 发表于 2024-11-5 10:21
在启动文件中(如startup_gd32f30x.s或类似文件),需要定义向量表的偏移量
你好,我这样设置过了,请问该程序还是不能启动(在0x0800E000地址上)。
(我有bootloade程序跳转至该地址) tpgf 发表于 2024-11-5 10:21
在启动文件中(如startup_gd32f30x.s或类似文件),需要定义向量表的偏移量
你好,我这样设置过了,请问该程序还是不能启动(在0x0800E000地址上
(我有bootloade程序跳转至该地址) 使用nvic_vector_table_set函数来设置向量表的基址
在GD32 Embedded Builder中设置程序偏移地址,通常涉及对链接脚本(Linker Script)的修改。链接脚本用于定义程序的内存布局,包括代码、数据、堆栈等区域的起始地址和大小。 在系统文件中,添加与启动文件中相同的向量表偏移量定义
如果需要更细粒度的控制,可以修改链接器脚本文件
链接器脚本中,需要根据MCU的具体型号和内存布局来设置FLASH的基地址和长度
建议参考GD32官方文档和示例代码,以确保正确性和兼容性
页:
[1]