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

Infineon PSoC4 MAX项目链接器脚本引用__VECTOR_TABLE报未定义错误咨询

PSoC4 MAX 链接器脚本中__VECTOR_TABLE未定义符号问题

问题背景

在基于Infineon PSoC4 MAX的项目中修改链接器脚本,尝试将ISR向量表明确放置到指定位置时,链接器提示__VECTOR_TABLE为未定义符号,但该符号已在对应型号的启动文件中定义。

启动文件相关代码

/*----------------------------------------------------------------------------
Exception / Interrupt Vector table
*----------------------------------------------------------------------------*/

extern const cy_israddress __VECTOR_TABLE[CY_VECTOR_TABLE_SIZE];

const cy_israddress __VECTOR_TABLE[CY_VECTOR_TABLE_SIZE] __VECTOR_TABLE_ATTRIBUTE = {
    (cy_israddress)(&__INITIAL_SP), /* Initial Stack Pointer */
    // 其余向量表项省略
};

链接器脚本相关代码

.text appl_start :
{
    CREATE_OBJECT_SYMBOLS

    PROVIDE(__cy_interrupt_vector = __VECTOR_TABLE);
}

错误信息

modustoolbox/tools_3.2/gcc/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/bin/ld.exe:./bsps/TARGET_PSoC4_MAX/TOOLCHAIN_GCC_ARM/Application_linker.ld:142: undefined symbol `__VECTOR_TABLE' referenced in expression

问题分析与解决

这跟编译器内部保留符号无关,核心问题出在链接阶段的符号可见性或文件处理逻辑上:

  • 链接顺序错误:链接器处理脚本时,包含__VECTOR_TABLE定义的启动文件目标(比如startup_psoc4max.o)还未被纳入链接输入列表。需确认启动文件已正确添加到项目的编译/链接列表中,且在链接器脚本之前被处理。
  • 段属性冲突:__VECTOR_TABLE_ATTRIBUTE是编译器属性宏,作用是将向量表放到特定段(比如.isr_vector)。如果你的链接器脚本.text appl_start段未包含这个特定段,链接器就无法识别__VECTOR_TABLE符号。可查看该宏的定义(通常在器件头文件中),确认对应的段名,然后在链接器脚本中显式包含该段。
  • 符号引用时机不当:CREATE_OBJECT_SYMBOLS仅为已输入的目标文件创建符号,若启动文件未提前输入,此时引用__VECTOR_TABLE必然报错。更稳妥的方式是直接定位向量表所在段,而非引用符号,示例如下:
.isr_vector :
{
    PROVIDE(__cy_interrupt_vector = .);
    *(__VECTOR_TABLE)
} > FLASH

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:43:22