You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arm Cortex-M7 SAM-E70下XC32链接器保留强弱函数定义问题

问题:SAM-E70向量表中强符号未替换弱符号,二者共存的原因(XC32 v4.40)

我在进行SAM-E70基础开发,缺乏合适的官方文档,折腾6小时后GPT也没能解决问题,特此求助。我的需求是:将中断服务函数直接放入向量表,当函数未定义时使用默认弱符号UnusedIsrHandler,且ISR函数必须单独定义,不能放入结构体中。以下以Reset_Handler为例说明问题:

代码定义

interrupts.c 中的弱符号定义

__attribute__((weak, section(".pfnReset"))) void (*const interrupts_reset)(void) = UnusedIsrHandler; 

startup_xc32.c 中的强符号定义

__attribute__((section(".pfnReset"))) void (*const interrupts_reset)(void) = &Reset_Handler;

.map 文件输出内容

*(.pfnReset.*)
 .pfnReset.interrupts_reset
                0x0000000000400004        0x4 build/default/production/_ext/1083072663/interrupts.o
 .pfnReset.interrupts_reset
                0x0000000000400008        0x4 build/default/production/_ext/1294464586/startup_xc32.o
                0x0000000000400008                interrupts_reset

SREC 文件向量表起始部分(地址 400000)

S2 14 400000 F0FF4520 E5B54000 015B4000 E5B54000 07
                         ^        ^
                         |        |
                弱函数地址        |
                                  |
                       强函数地址 |

注:F0FF4520 为栈指针初始化值,其后同时出现了弱函数和强函数的地址。

链接脚本片段

SECTIONS
{
    .vectors :
    {
        . = ALIGN(4);
        _sfixed = .;
        __svectors = .;
        KEEP(*(.pvStack.*))               /* 栈指针 */
        KEEP(*(.pfnReset.*))              /* 复位向量 */
        KEEP(*(.pfnNonMaskableInt.*))     /* 不可屏蔽中断 */
        KEEP(*(.pfnHardFault.*))            /* 硬错误 */
        KEEP(*(.pfnMemoryManagement.*))     /* 内存管理错误 */
        KEEP(*(.pfnBusFault.*))             /* 总线错误 */
        KEEP(*(.pfnUsageFault.*))           /* 使用错误 */
        KEEP(*(.pfnReservedC9.*))           /* 保留 */
        KEEP(*(.pfnReservedC8.*))           /* 保留 */
        KEEP(*(.pfnReservedC7.*))           /* 保留 */
        ...
        } > VECTOR_REGION
}

为什么强函数没有替换弱符号,反而二者都被保留在向量表中?(使用工具链 XC32 v4.40)


内容的提问来源于stack exchange,提问作者andz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 00:23:10