我正在尝试使用arm-gcc工具链来分析我的嵌入式程序的堆栈使用情况。该程序是单线程的,所以我通常可以使用-fstack-usage
gcc的参数来分析堆栈。
通常,此选项会生成.su
个文件以及编译单元。那些描述了每个函数的堆栈使用。但在我的情况下,这些文件是空的。
以下是.su文件内容的示例(来自https://mcuoneclipse.com/2015/08/21/gnu-static-stack-usage-analysis/):
main.c:36:6:bar 48 static
main.c:41:5:foo 88 static
main.c:47:5:main 8 static
我正在使用gcc-arm-none-eabi-5_4-2016q3
,但问题也出现在gcc-arm-none-eabi-5_3-2016q1
上。
你对这个问题有所了解吗?或者另一种控制堆栈使用的解决方案?
答案 0 :(得分:2)
经过大量测试后,我找到了一个解决方案:-fstack-usage
似乎与-flto
不兼容。
禁用-flto
可以生成.su文件。
我不知道原因,因为我通过逐个启用/禁用标记来解决这个问题。此外,通过删除-flto
,链接器会失败,但会计算堆栈使用情况。