【问题标题】:What Causes CCS6 to Generate Symbols like "__TI_int47"?是什么导致 CCS6 生成像“__TI_int47”这样的符号?
【发布时间】:2014-09-28 05:48:40
【问题描述】:

在 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"
}

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

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

【问题讨论】:

    标签: msp430 code-composer


    【解决方案1】:

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

    【讨论】:

    • 优秀的答案。对于一个 PERL 人来说,你肯定知道你的东西。太糟糕了,它们没有生成更直观的东西,例如 port1_vector 作为函数名称。
    【解决方案2】:

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

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

    【讨论】:

    • 是的,有两个地方定义了#pragma vector=PORT1_VECTOR。出色的演绎。
    猜你喜欢
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多