打印

GD32 Embedded Bulider怎么设置程序偏移地址

[复制链接]
934|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rui911|  楼主 | 2024-11-4 14:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#技术资源#如题,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
请问我还需要修改哪些部分?

使用特权

评论回复
沙发
tpgf| | 2024-11-5 10:21 | 只看该作者
在启动文件中(如startup_gd32f30x.s或类似文件),需要定义向量表的偏移量

使用特权

评论回复
评论
rui911 2024-11-5 11:13 回复TA
你好,我这样设置过了,请问该程序还是不能启动(在0x0800 E000地址上)。(我有bootloade程序跳转至该地址) 
板凳
rui911|  楼主 | 2024-11-5 11:04 | 只看该作者
本帖最后由 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               
               
}


使用特权

评论回复
地板
rui911|  楼主 | 2024-11-5 11:14 | 只看该作者
tpgf 发表于 2024-11-5 10:21
在启动文件中(如startup_gd32f30x.s或类似文件),需要定义向量表的偏移量

你好,我这样设置过了,请问该程序还是不能启动(在0x0800E000地址上)。
(我有bootloade程序跳转至该地址)

使用特权

评论回复
5
rui911|  楼主 | 2024-11-5 11:15 | 只看该作者
tpgf 发表于 2024-11-5 10:21
在启动文件中(如startup_gd32f30x.s或类似文件),需要定义向量表的偏移量

你好,我这样设置过了,请问该程序还是不能启动(在0x0800E000地址上
(我有bootloade程序跳转至该地址)

使用特权

评论回复
6
paotangsan| | 2024-11-6 11:46 | 只看该作者
使用[size=0.875]nvic_vector_table_set函数来设置向量表的基址

使用特权

评论回复
7
onlycook| | 2024-11-6 13:15 | 只看该作者
在GD32 Embedded Builder中设置程序偏移地址,通常涉及对链接脚本(Linker Script)的修改。链接脚本用于定义程序的内存布局,包括代码、数据、堆栈等区域的起始地址和大小。

使用特权

评论回复
8
renzheshengui| | 2024-11-6 15:12 | 只看该作者
在系统文件中,添加与启动文件中相同的向量表偏移量定义

使用特权

评论回复
9
wakayi| | 2024-11-6 18:32 | 只看该作者
如果需要更细粒度的控制,可以修改链接器脚本文件

使用特权

评论回复
10
wowu| | 2024-11-6 20:22 | 只看该作者
链接器脚本中,需要根据MCU的具体型号和内存布局来设置FLASH的基地址和长度

使用特权

评论回复
11
xiaoqizi| | 2024-11-6 22:08 | 只看该作者
建议参考GD32官方文档和示例代码,以确保正确性和兼容性

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝