This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/MSP430F2618:在编译器从4.4 v.8更改为v.16.9 .3LTS (COFF更改为EABI)后,.xfer部分仍为空。 如果使用--Retain链接程序选项,则显示未定义符号错误

Guru**** 2618835 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/657141/compiler-msp430f2618-xfer-section-remains-empty-after-compiler-change-from-v4-4-8-to-v16-9-3lts-coff-to-eabi-shows-undefined-symbol-error-if-used---retain-linker-option

部件号:MSP430F2618

工具/软件:TI C/C++编译器

您好,

从之前的一篇文章中,我了解到在迁移到COFF到EABI时,需要使用 http://processors.wiki.ti.com/index.php/C6000_EABI_Migration#Conditional_Linking_Feature中提到的Retain来包括外部引用部分

上一篇文章: https://e2e.ti.com/support/development_tools/compiler/f/343/t/61.2198万#pi317851=2</s>31.7851万

我现在有一个类似的问题在另一个项目.

在COFF格式中,my "..xfer: section使用0x4c字节作为映射文件。 在EABI中,格式化我的".xfer"部分使用0x00字节。 "..xparama"部分也是如此。 但是对于"..xparams"部分,在.asm文件中添加一行<.reatain "..xparams">是有效的,我可以看到映射文件中该部分的已用字节数为非零值。

但是,当我对"..xfer"使用相同的解决方案时,我看到错误显示"未解析的符号仍存在"。 在.asm文件中,中断符号用"__FV" postfix (例如:.global ADC12ISR__FV)来表示,但在main.c中,ISR只使用如下符号名称来编写:  

#pragma vector=ADC12_vector
__interrupt void ADC12ISR (void){...}


因为#pragma向量用于将ADC12ISR设置为中断向量,PC可能会跳转到ISR21,查找ADC12ISR的地址并在那里执行。 ASM文件中的ADC12ISR_fv有何关联? 如果我错了,请纠正我。 请将我引导至一个文档,我可以在其中阅读更多有关此内容的信息。 如何解析符号?

提前感谢。

此致,

里希特

图像显示编译器错误。

附加我的.asm和.map文件。

e2e.ti.com/.../BTasm.txt

e2e.ti.com/.../BTmap.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Rishit Borad"]

    在.asm文件中,中断符号用"__FV" postfix (例如:.global ADC12ISR__FV)来表示,但在main.c中,ISR只使用如下符号名称来编写:  

    #pragma vector=ADC12_vector
    __interrupt void ADC12ISR (void) 

    [/引述]

    这是您问题的核心所在。  函数名称必须在C和汇编中完全相同。  我不能检验我的建议是否确定。  但是我非常确信,如果您从汇编文件中的所有函数名称中删除“__FV”,它将会起作用。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    George,

    感谢您的迅速回复。

    这就是我的想法。 但它不会消失。

    要添加更多信息,当输出格式为COFF时,它将正常工作。 我的意思是在矢量表中使用名称ADC12ISR和ADC12ISR__FV定义的ISR。

    如果我不添加<.Retain "..xfer">,则它可以正确编译EABI格式,但映射文件显示.xfer段使用的字节为零。

    此致,

    里希特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    George,

    在你回答之后,我想做一个实验。

    可能是名称混在一起(如果不是,请更正我)。

    更改了声明ISR的方式:

    #ifdef __cplusplus
    extern "C"中断
    #endif
    void ADC12ISR(void)
    {
    
    } 

    并将矢量表中的名称从ADC12ISR__FV更改为ADC12ISR。

    谢谢George,感谢您的帮助。

    此致,

    里希特