1

在 CCS6 中编译时,我遇到了这个错误:

#10056 symbol "__TI_int47" redefined

(使用 Texas Instruments 的 Code Composer Studio 为 MSP430 编译)

声明中断服务程序时会发生这种情况,例如:

#pragma vector=PORT1_VECTOR
__interrupt void P1input_ISR ()
{
    P1IFG &= ~BIT0; // mark interrupt as "handled"
}

是什么原因导致生成这些看似匿名的符号?

如何追踪生成符号的代码?

4

2 回答 2

3

PORT1_vector是 47。#pragma vector 47在 CCS 和 IAR 中,会为中断 47 安装以下函数。显然,它是通过定义一个名为的符号__TI_int47来实现的,链接器稍后将使用该符号填充中断向量表。出现错误是因为为同一个向量定义了两个不同的函数,这是不可能的。

于 2014-09-28T05:59:20.970 回答
1

符号 __TI_int47 可能是您的 ISR 函数的某种别名。它只是编译器的一个部分如何与另一部分通信有关您定义的 ISR 的信息的内部实现细节。您发布的 pragma 可能会导致它被定义。我敢打赌 PORT1_VECTOR 由特定于处理器的头文件定义为 47。

听起来您的项目中有多段代码定义了相同的 ISR,因此您将需要删除一个或可能从另一个调用其中一个。

于 2014-09-28T05:56:54.280 回答