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.

[参考译文] armcl.exe 可以#39;t surpport 编译递归函数

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1166317/armcl-exe-can-t-surpport-compile-recursive-functions

当我使用 armcl.exe,编译代码时、如果 我的代码中有递归函数、编译将暂停。

如果 armcl 能够支持编译递归函数、我应该怎么做?  

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

    我不确定这是什么...

    [引用 userid="542348" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1166317/armcl-exe-can-t-surpport-compile-recursive-functions "]编译将暂停。

    方法。  请详细描述您看到的内容、并描述您期望看到的内容。  对于发生此行为 的源文件、请按照文章如何提交编译器测试用例中的说明进行操作。

    我可以对任何编译器(包括 armcl)如何处理递归发表一些一般性评论。  当函数直接或间接调用自身时、该函数的处理方式与任何其他函数调用一样。  不会发生特殊处理。  编程人员应编写代码、以便递归在运行时以某种方式结束。  如果该步骤未正确完成、编译器将不会检测到该步骤、也不会发出任何诊断。

    谢谢、此致、

    乔治

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

    大家好、感谢你的帮助。 我向您添加一些编译信息

    1.compile 暂停此处、在 SPI_Priv.o 中

    然后按 Ctrl+c,它会在 IA_Interface_10ms.o 中报告错误

    3. 1和2是结果,然后我分析  IA_Interface_10ms.c,我发现递归函数调用 会影响编译。

      如果我不调用此递归函数,编译将会成功

      一些编译标志为 :-c -qq -pdsw225 -ms -O4 -s

       IA_Interface_10ms.c 由 Simulink 生成、抱歉、我无法编写提供给您的类似测试代码

    4.然后我发现在编译 IA_Interface_10ms.c 时一些中间文件不会生成,显示其他 C 文件 的中间文件

       IA_Interface_10ms.c 有两个文件,另一个有六个文件

    5.我希望以上资料对您的分析很有用,非常感谢

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

    看起来您是使用-o4构建的。  这将触发链接时优化 LTO,这可能意味着完成链接需要大量的时间--这取决于代码,但它不应无限期暂停。  正如 George 所说、递归呼叫的处理方式与常规呼叫相同。  我建议尝试以较低的优化级别(-o3)进行构建、以验证编译/链接是否成功。  在-o4中、您可能需要在中断构建之前给它更多的完成时间。

    除此之外、如果没有重现问题的实际测试案例、我们几乎无法进行诊断。  如果有的话、您可以获取 Simulink 代码并将其缩减、这样就可以复制、那么我们就可以查看这一点了。

    谢谢

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

    谢谢、我已经尝试了-O3、它也不起作用、 Simulink 的精简代码我不知道如何编写、所以我无法提供帮助、抱歉

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

    大家好--我建议继续降低优化级别。  至少、您已经证明该问题与链接时优化无关。 由于编译器对递归函数没有任何特殊的操作、因此我们只能推测此处的问题与所包含的递归函数间接相关、而不是递归函数。  但是、如果没有测试用例、我们就无法进行任何测试。  我还建议降低递归函数、直到您在编译器中不再看到问题、这可能会使您更深入地了解正在发生的情况。

    除此之外、您还可以尝试使用类似的递归函数构建项目、并查看是否可以使其生成相同的行为。