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.

[参考译文] TMS320F28379D:启用优化器级别 0 会导致 C2000 上的栈溢出

Guru**** 2859030 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1629048/tms320f28379d-enabling-optimizer-level-0-causes-stack-overflow-on-c2000

部件号: TMS320F28379D
主题: C2000WARE 中讨论的其他器件

尊敬的 TI 支持团队:

在 F28379D C2000 芯片的 CPU1 上启用优化器级别 0 时、我会遇到堆栈溢出。 禁用 优化器时、栈使用量为 2K 栈的~5%。 启用优化器时、堆栈使用量会跳至~104%、从而产生 ITRAP。 我用模式“A5A5"填“填充栈、并注意到只使用了栈的前几个字节、然后 SP(栈指针)向下跳到栈末尾附近并开始使用栈末尾、这样就有一个很大的未使用栈区域、如“A5A5"所“所述。

我已经在我这边排除了静态内联函数、尽管 C2000ware 使用了静态内联函数、因此堆栈上下文帧可能很大、并且留下一个很大的堆栈存储器区域未使用?

通过“Stack Usage“窗口、我可以看到每个函数的栈使用情况、没有什么值得我关注的地方。

我在栈末尾设置一个硬件观察点、并不断点击 SCIB RX 中断。 但是、我认为本身不是 SCI B RX 中断导致问题、因为我有两种模式可以利用 SCI B RX 中断、其中一种模式会导致栈溢出、而另一种模式不会。 导致栈溢出的模式更多地是数学/CPU 密集型、因此我想知道是否有东西导致溢出、但我觉得很奇怪的是、栈指针会跳过这么大的栈内存区域并利用栈末尾附近的东西。

任何关于如何找出根本原因的指示都是很好的。

谢谢!

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

    嗨、Nigel、

    让我检查一下这个问题、我会回来的。

    谢谢

    Aswin

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

    嗨、Nigel、

    您的任何函数是否使用大型数组或结构?  
    ",="" arial,="" sans-serif;="" font-size:="" 16px;="" font-weight:="" 400;="" margin:="" 0px;="" text-decoration:="" none;="" border-bottom:="" 0px="" none="" rgb(10,="" 10,="" 10);"="">编译器通常会 为具有许多局部变量或复杂数学表达式的函数生成一个较大的局部框架、尤其是在优化为 0 级时。  函数启动时、编译器不会逐个推入变量。 它从 SP 中减去一个常数值、一次为所有局部变量保留空间。  这可能是 SP 跳过较大区域的原因。  

    此致

    Siddharth

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

    尊敬的 Siddharth: 在 CPU1 上、有一个大型 ISR、其下方有许多函数调用、但数组不超过 100 个字符。  这就是我在 SPRU514T 优化编译器指南中找到的信息、其中 XAR2 似乎可以代替 SP:



    如果您的团队认为这没有问题要进行调查、我们可以安全地假设优化器级别 0 是根本原因、那么我想除了增加堆栈大小之外、我还有其他什么可以做的。

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

    嗨、Nigel  

    如果可能、PLS 共享项目、以缩小问题上的向下箭头。  

    您可以逐步执行反汇编、并查看是否有任何函数在递增 SP(对于 e、g  ADDB SP、#num.)  

    此致

    Siddharth