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.

[参考译文] 编译器/TMS320F280049:如果在 CMD 和 main.c 中定义变量会怎样?

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/921587/compiler-tms320f280049-what-if-define-a-variable-in-both-cmd-and-main-c

器件型号:TMS320F280049

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

客户发现其固件中的 CMD 文件中也分配了定义的全局变量、但未报告编译器错误。  这会是个问题吗? 谢谢你。

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

    目前、我假设您使用的是 COFF ABI、而不是最近推出的 EABI。  

    此符号用 C 语言编写...

    /* C 文件*/
    int global_variable; 

    (笑声) 该符号写入链接器命令文件...

    /*链接器命令文件*/
    global_variable = 0xa000; 

    (笑声) 是不同的符号。  在链接器映射文件中搜索这些符号。  两个符号都存在、值不同。  C 文件中的符号在 自动生成的汇编文件中被写入_global_variable。  在开头添加一个下划线字符。

    [报价用户="Aki li"]是否会有问题?

    如果用户希望这些符号不同、则为否   

    如果您更改为 EABI、它将不起作用。  在 EABI 中、符号的编写方式与在任何地方都相同。  下划线字符会添加到开头。  在这种情况下、这些符号是相同的、您在构建时会看到一个错误。

    谢谢、此致、

    乔治

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

    乔治

    谢谢你。 客户说他们已经在 CMD、i.e、 _global_variable 中的变量之前添加了一个下划线字符。  他们发现它无法工作、除非他们在 C 文件中禁用了变量。

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

    [引用 user="Aki li"]他们发现它无法正常工作

    请详细说明当它不起作用时会发生什么情况。  客户看到什么?  客户期望什么?

    请在 C28x 汇编工具手册中搜索 标题为 在 C/C++应用中使用链接器符号的子章节。  也许该文档可以解决这个问题。

    谢谢、此致、

    乔治

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

    你好、 George

       如果我们在 链接器命令文件中将变量定义 为  _global_variable、编译器如何处理冲突?  是否有 global_variable 的一个地址或  global_variable 的两个地址?

    谢谢你。  

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

    [引用 user="Mark-Lu"]   如果我们在 链接器命令文件中将变量定义 为  _global_variable,编译器如何处理冲突?

    如果您在 C 代码中将其定义为...

    extern int global_variable; 

    (笑声) 那么没有冲突。  它们被视为相同的符号。

    如果您在 C 代码中将其定义为...

    int global_variable;//无 extern */ 

    然后在链接时得到错误诊断。  链接器抱怨同一符号的多个定义。

    谢谢、此致、

    乔治