当我使用 armcl.exe,编译代码时、如果 我的代码中有递归函数、编译将暂停。
如果 armcl 能够支持编译递归函数、我应该怎么做?
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,编译代码时、如果 我的代码中有递归函数、编译将暂停。
如果 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 代码并将其缩减、这样就可以复制、那么我们就可以查看这一点了。
谢谢
大家好--我建议继续降低优化级别。 至少、您已经证明该问题与链接时优化无关。 由于编译器对递归函数没有任何特殊的操作、因此我们只能推测此处的问题与所包含的递归函数间接相关、而不是递归函数。 但是、如果没有测试用例、我们就无法进行任何测试。 我还建议降低递归函数、直到您在编译器中不再看到问题、这可能会使您更深入地了解正在发生的情况。
除此之外、您还可以尝试使用类似的递归函数构建项目、并查看是否可以使其生成相同的行为。