在CCS6中编译时,我遇到了这个错误:
#10056 symbol "__TI_int47" redefined
(使用德州仪器的Code Composer Studio编译MSP430)
在声明中断服务例程时会发生这种情况,例如:
#pragma vector=PORT1_VECTOR
__interrupt void P1input_ISR ()
{
P1IFG &= ~BIT0; // mark interrupt as "handled"
}
是什么导致生成这些匿名符号?
如何跟踪生成符号的代码?
答案 0 :(得分:3)
PORT1_vector
为47. #pragma vector 47
在CCS和IAR中导致为中断47安装以下函数。显然,它通过定义名为__TI_int47
的符号来实现链接器稍后将用于填充中断向量表。之所以出现错误是因为为同一个向量定义了两个不同的函数,这是不可能的。
答案 1 :(得分:1)
符号__TI_int47可能是您的ISR功能的某种别名。它只是一个内部实现细节,说明编译器的一部分如何与另一部分通信有关您定义的ISR的信息。您发布的pragma可能会导致它被定义。我敢打赌,PORT1_VECTOR被特定于处理器的头文件定义为47。
听起来你的项目中有多段代码定义了相同的ISR,所以你需要删除一个或者从另一个中调用一个。