2014-09-28 186 views
1

虽然CCS6编译,我遇到了这个错误:什么原因导致CCS6生成符号“__TI_int47”?

#10056 symbol "__TI_int47" redefined 

宣布中断服务程序时,比如它发生(使用德州仪器的Code Composer Studio的MSP430编译):

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

是什么导致这些匿名外观符号被生成?

如何跟踪生成该符号的代码?

回答

1

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

听起来好像在你的项目中有多个代码定义了相同的ISR,所以你需要删除一个或者从另一个中调用一个。

+0

是的,有两个地方正在定义'#pragma vector = PORT1_VECTOR'。优秀的演绎。 – 2014-09-28 06:10:01

3

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

+0

优秀的答案。对于PERL的人,你一定知道你的东西。太糟糕了,它们不会生成更直观的东西,比如'port1_vector'作为函数名称。 – 2014-09-28 06:15:26

相关问题