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.

[参考译文] TDA4AH-Q1:C7x 编译器报告"内部错误:不匹配 ARGREF"在 5.0.0.LTS 上、但在 3.1.0.LTS 上工作

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1646693/tda4ah-q1-c7x-compiler-reports-internal-error-no-match-for-argref-on-5-0-0-lts-but-works-on-3-1-0-lts

器件型号: TDA4AH-Q1

在为 C7x 编译一些裸机代码期间、5.0.0.LTS 编译器会抛出以下错误:

“内部错误:与 ARGREF 不匹配“。

产生此错误的代码行是:

  __vstore_packl_2src (&Vout、vResultLo、vResultHi);

其中变量为(全部在函数栈帧上):

  Char64 Vout;

  short32 vResultLo、vResultHi;

这似乎在 3.1.0.LTS 下编译正确、但我们确实不希望回滚几个主要的编译器版本。

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

    尊敬的 Ross:

    在我看来、我使用指定的编译器版本测试了相同的内在函数、并成功编译而没有遇到任何问题。 使用以下测试设置和步骤进行验证:

    测试设置

    使用的编译器:5.0.0.LTS 编译器
    使用的工具:CCS 版本 12.7.0
    链接器脚本:请使用路径 C:\ti\processor-sdk-rtos-j784s4-evm-11_02_00_06\DSPLIB\cmake\linkers\C7120\lnk.cmd 中的链接器脚本

    构建遵循的步骤

    1) 创建新的 CCS 工程  




    2) 在 CCS 工程目录中上传链接器脚本  


    3) 使用以下代码修改 main.cpp 中的代码  

    e2e.ti.com/.../intrinsic_5F00_sample_5F00_code.cpp



    4) 右键点击工程并构建工程


    此致、

    Ben  

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

    您好 Ben、

    恐怕这么简单 — 我们有自己的构建系统,链接器脚本等-实际上我们根本没有使用 SDK 中的任何内容(我们也不使用 CCS)。

    我将尝试进行最小的复制并上传它,但我不能上传真实的代码,因为它有安全分类。

    请注意、该链接器在编译阶段(不是链接器)失败、因此我怀疑链接器脚本与它有太多关系。

    谢谢、

    Ross

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

    尊敬的 Ross:

    请尽可能使用您的设置详细信息更新该主题、我将对此进行进一步了解。

    链接器脚本只是为了更好地了解正在使用的整体构建和存储器设置。

    请注意、我们能够使用 CCS 编译它。 我还会共享构建日志以供参考。

    e2e.ti.com/.../1157.console_5F00_log.txt

    谢谢、
    Ben

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

    您好 Ben、

    我创建了一个最小的复制案例(请不要在代码中读得太多 — 我已经剥离了它的 95%、这就是为什么它不做像设置 SA/SE 这样合理的事情)。

    e2e.ti.com/.../6874.Makefile.txt

    e2e.ti.com/.../error.c

    我不得不重命名 Makefile、以便添加.txt 以供上传、但这应该很好。

    我的操作系统是 Ubuntu 22.04

    谢谢、

    Ross

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

    尊敬的 Ross:

    我已经从我这边重现了这个问题 您还请从您的端部进行验证。

    e2e.ti.com/.../0882.console_5F00_log.txt
    此致、

    Ben

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

    您好 Ben、

    是的、这正是我看到的(例如,与“make test_v3“进行比较,这不会引发错误)。

    好消息(对我来说),你看到它至少 Slight smile

    谢谢、

    Ross

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

    尊敬的 Ross:
    我做了一些更改、将深度嵌套内在函数调用拆分为命名的中间变量、代码编译成功。 您能否也尝试一下。

    e2e.ti.com/.../1346.error.c 
    此致、

    Ben

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

    您好 Ben、

    这些更改对代码的实际版本无效(即 Vout 与输出不同,我们确实需要在流地址生成器上进行谓词)。  我在这里上传的版本被极大地简化 — 所有的零都不是真正的零,许多是他们自己详细计算的结果 — 但这不是触发编译器错误所必需的。

    也许您可以描述您认为会引发问题的因素、以及我应该在真实代码中更改哪些模式、看看我是否可以复制您的成功?

    也就是说、  虽然可以重新编译代码以使错误消失,但事实上编译器崩溃显然合法的 C 构造肯定指向编译器中的一个错误,因此我 不会认为这个问题解决,即使在这种情况下无论如何 — 它将在我的身边解决它,而不是在你的解决它(如果可以做出与真实代码兼容的更改,我将尝试)。

    谢谢、

    Ross

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

    尊敬的 Ross:
    使用编译器版本 5.0.1 LTS、我成功地编译了以前产生错误的代码。 无需恢复到早期的编译器版本。 您能否从您的角度尝试相同的设置、如果您仍然发现任何问题、请告知我们?

    此致、

    Ben

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

    尊敬的 Ross:

    在为 C7x 编译一些裸机代码期间、5.0.LTS 编译器会抛出以下错误:

    我理解您的担忧。 我使用 C7x CGT 版本 v4.1.0.LTS、v3.1.0.LTS、v5.0.0.LTS 和 v5.0.1.LTS 编译了所共享的最小代码。 如您所述、仅 v5.0.0.LTS 出现问题。 这似乎是参数引用 (ARGREF) 阶段的后端问题、我认为它已在 v5.0.1.LTS 中修复。

    请尝试使用最新的 CGT 版本 (v5.0.1.LTS:https://www.ti.com/tool/download/C7000-CGT/5.0.1.LTS) 并告知我们。 如果您仍然遇到问题、我们将与编译器团队进行检查、并在需要时生成错误。

    此致、

    Betsy Varughese.

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

    您好 Betsy、

    我没有意识到有一个新的版本可用。  我刚刚测试过它,我可以确认它也解决了真正的代码和最小复制的问题,所以这是伟大的。

    感谢您的帮助。

    Ross

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

    尊敬的 Ross:

    我认为答案可以解决您的问题、我们可以结束主题。 如有任何未决问题、请告知我们。

    此致、

    Betsy Varughese.