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.

[参考译文] 编译器/TMS320VC5410A:编译 C 程序时潜在的流水线冲突

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/889297/compiler-tms320vc5410a-potential-pipeline-conflict-when-compile-c-program

器件型号:TMS320VC5410A

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

您好!

当我使用 CCS 编译 C 程序时、我会收到许多警告、例如:

"C:\Users\admini~1.PC-\AppData\Local\Temp\0740811"、警告! 第1589行:

[W0005]

潜在流水线冲突:SXM:1时隙延迟

DLD * SP (2)、B      ;|93|

如何删除这些警告? 在  其他平台中编译时、C 程序是正确的。

我们的 Code Composer Studio 版本为:5.5.0.00077

此致!

杜德豪

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

    几年前、TI 结束了对 C54x 器件和编译器等相关工具的支持。  也就是说、我很高兴查看一个测试用例并提供我能得到的光。   

    对于看到有关流水线的这些诊断的一个源文件、请按照文章 如何提交编译器测试用例中的说明进行操作。

    谢谢、此致、

    乔治

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

    乔治

    感谢您的回答!

    我按照说明附加了所需的文件、我们的编译器版本是  object.map 文件中的"TMS320C54x Linker PC v4.2.0"。

    此致!

    杜德豪

    e2e.ti.com/.../aecm_5F00_core.pp.txt

    e2e.ti.com/.../compiler_5F00_options_5F00_used.txt

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

    感谢您的测试案例。

    编译器始终对流水线进行建模、并调度指令以避免流水线冲突。  当您使用构建选项 --pipeline _warn 时、汇编器会以类似的方式对流水线建模、并在检测到流水线冲突时发出诊断。  这是编译器和汇编器之间在是否存在这些特定流水线冲突方面的分歧。  

    编译器流水线模型在该领域的工作时间更长、并且更有可能是正确的。  在构建 C 或 C++代码时、无需使用开关 --pipeline _warn。  仅在构建手工编码的装配体时使用。

    谢谢、此致、

    乔治

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

    乔治

    我 以前也认为是这样、 我忽略了这些警告并下载了代码以运行、 但是、很快程序就会损坏、不同的情况下会产生 "无法在地址0x86中找到代码"或 在无限循环中找到代码(当我单步 执行代码时、循环条件变量值不能更改! )。 我检查堆栈(SP)和 堆大小。 一切 都足够了!  

    我单步 执行整个程序(每次 执行只运行一次),这是可以的,但如果运行是空的,它很快就会停止运行。  

    该程序 在其他平台( arm )中运行良好,因此我怀疑这些编译警告!  是否确定 可以忽略这些警告?

    此致!

    杜德豪

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

    请记住、在本主题中、我将概括性地讲。  我对 C54x 流水线工作方式的记忆太模糊、无法具体描述。

    单步执行某个函数可能会隐藏在整个函数运行过程中暴露的流水线问题。  但听起来好像您没有这样做。  如果您遇到了实际的流水线问题,则无论何时您执行此操作...

    [报价 USER="user5926475"]我的步骤 运行整个程序(每个 执行只运行一次),它是可以的[/报价]

    (笑声) 您会体验到它。  你可以继续看看这个...

    [引用 user5926475]\n 但如果免费运行、很快就会停止运行。  [/报价]

    (笑声) 通常意味着存在某种计时问题。  不幸的是,这不是我的专长。

    考虑到 C54x 支持早已停止、我没有合适的选项来发送您的下一个。  我会询问、但我不能再承诺任何其他事情了。

    谢谢、此致、

    乔治

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

    乔治

    “我单步 运行整个程序(每次 执行一次),是可以的”,我的意思是程序不是契约或损坏。  我不知道  是否遇到流水线问题。

    该计划  在我们的项目中发挥着重要作用。

    希望得到您的帮助!

    此致!

    杜德豪

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

    杜德豪、您好!

    作为实验、您可以使用编译器保留生成的汇编代码、用于生成流水线警告的 C 文件。 然后将项目中的这些 C 文件替换为生成的汇编语言文件、并在汇编器发出流水线警告时在汇编语言中插入 NOP。

    此致、
    弗兰克

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

    您好、Frank、

    我将 NOP 插入生成的汇编、并在工程中将同名 C 替换为它。 然后我编译、没有流水线警告。

    我只能 用这种方法来解决问题吗?  

    此致!

    杜德豪

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

    杜德豪

    >> 然后我编译、没有流水线警告。

    在消除流水线警告后、崩溃是否得到解决?

    >> 我是否只能 用这种方法来解决问题?

    我不确定。 也许您可以尝试使用编译器设置来查看是否有方法生成汇编器不会发出流水线警告的代码。

    此致、
    弗兰克

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

    [引用 user="user5926475"]

    我将 NOP 插入生成的汇编、并在工程中将同名 C 替换为它。 然后我编译、没有流水线警告。

    我只能 用这种方法来解决问题吗?  

    [/报价]

    我们不打算将该方法用作解决问题的方法。  这只是一个试验来证明汇编器的这些诊断是否准确。  如果问题行为仍然存在、则汇编器诊断错误。  如果问题行为消失、则汇编器诊断正确。

    我仍然不确定该实验的结果。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    编译 C 程序时没有流水线冲突。 我弄错了。 我已经解决了这个问题。

    非常感谢您的帮助!

    此致、

    杜德豪