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.

[参考译文] 编译器/TMS320F2.8335万:内部错误:虚拟寄存器数量超出限制。 减小功能大小

Guru**** 2551110 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/582196/compiler-tms320f28335-internal-error-number-of-virtual-registers-beyond-limit-reduce-function-size

部件号:TMS320F2.8335万

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

你好  

我使用编译器TI v.6.4 12编译了我的项目,但失败了。

错误消息:

内部错误:虚拟寄存器的数量超出限制。 减小函数大小。\n这可能是一个严重的问题。 请联系客户支持,获取此问题的说明以及导致出现此内部错误消息的源文件示例。

有人以前发布过相同的错误,他用16.9 ver.3.0解决了这个问题。 但是编译我的项目需要花费很多时间(将近30分钟)。我还在代码中做了很多矩阵计算,错误可能 是由这个原因引起的,但是我不知道如何解决这个问题。

正在查找回复。

谢谢

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

    预处理 导致此错误的源代码,并将其附加到下一篇文章中。  此外,编译器看到的所有生成选项都将准确显示。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用6.4 .12编译程序需要多长时间?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不超过10秒

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

    乔治

    插入文件中的my_EKF.pp文件导致的错误。

    以下是错误报告:

    e2e.ti.com/.../my_5F00_efk.zip
    ****为项目MBC_BIOS_2构建配置调试****

    "e:\\ccsv6\\utils\\bin\\gmake 6.0 "-j4 -k navigation/my_efk.obj
    '构建文件:../navigation/my_efk.c'
    '调用:C2000编译器'
    "H:/lib_project/ti-CGT-C2000 6.4 .12/bin/cl2000"-v28 -ml -mt --float_support=fpu32
    --opt_for speed=5 6.4 .12/include"
    --include_path="H:/lib_project/MBC_BIOS_2/navigation"
    --include_path="H:/lib_project/MBC_BIOS_2/DSP2833x_common/include"
    --include_path="H:/lib_project/MBC_BIOS_2/DSP2833x_common/source
    --include_path="H:/lib_project/MBC_BIOS_2/DSP2833x_headers/include"
    --include_path="H:/lib_project/MBC_BIOS_2/DSP2833x_headers/source"
    -g--preproc_only--preproc_with-comment--preproc_with-compile
    --diag_wrap=off --diag_warning=225 --diag_warning=255 --display_error_number
    --gen_func_sections=on --obj_directory="navigation"
    --cmd_file="./configPkg/compiler.opt""./navigation/my_efk.c"
    >>../navigation/my_efk.c,第1732行:内部错误:虚拟数
    寄存器超出限制。 降低功能
    大小

    这可能是一个严重的问题。 请通过联系客户支持
    此问题的描述以及导致此问题的源文件的示例
    出现内部错误消息。

    无法继续编译-正在中止!


    >>编译失败
    gmake:***[navigation/my_efk.obj]错误1

    ****构建已完成****

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    乔治
    您能帮我解决问题吗?
    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    首先,我误解了问题的性质。 当然,由于寄存器太多,只需几秒钟就会崩溃,这种检查会在早期进行。

    您的测试用例涉及一个非常长的(MATLAB生成的)函数,该函数最终将具有关于4.6万 虚拟寄存器的信息。 这超出了6.4 12的能力,因此它刚刚中止。 6.4 12的设计就是这样的,因为众所周知,当虚拟寄存器计数达到如此高的值时,某些算法需要很长时间才能运行,因此补救措施总是建议用户将该功能分成较小的部分。 对于16.9 .0,我们决定继续编译程序,尽管它肯定需要很长时间。 这正是您的测试案例所展示的内容。

    随着虚拟寄存器数量的增加,编译时间呈指数级增长。 这只是TI编译器用于分配寄存器的算法的性质。 唯一的补救办法是将函数分解为更小的部分,或者只接受较长的编译时间。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它是否会影响代码实施的效率?

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

    不会。 如果有任何问题,它将提高效率。  在所有其他条件相同的情况下,编译器更有可能为较小的函数生成更好的代码。

    谢谢,此致,

    -George

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

    好的,我明白了,谢谢您回答问题