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.

[参考译文] TMS320F28P650DH:ERAD 问题/错误

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1568282/tms320f28p650dh-erad-problem-error

器件型号:TMS320F28P650DH


工具/软件:

您好、

客户尝试使用 ERAD 模块实现栈溢出检测、并已研究了 CCS 提供的示例 ERAD ex3_stack_overflow_detect。 如果在 RTOSISR () 内的 ESTOP0 之后使程序继续运行,那么 RTOSISR () 似乎会导致某种系统复位/错误,并且不清楚导致此行为的原因。

 客户尝试以下操作:

  • 将 RTOSINT 触发地址更改为_TI_STACK_END 之前的值

  • 尝试从 RTOSISR () 终止 recursiveFunction () 中的递归

什么可能导致此行为?  

此致、Holger

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

    您好、

    该示例 旨在展示如何检测栈溢出。  当栈指针更接近栈存储器的末尾时、会触发 ISR。  在本例中、我们只有一个 Estop、因此 CPU 会暂停以演示 ERAD 的功能。 如果继续执行、它将损坏相邻的存储器位置、并可能导致意外行为。 例如、如果从 RAM 运行、该示例可能会继续覆盖应用程序代码并导致故障。

    此致、

    Veena

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

    尊敬的 Veena:
    当 ISR 在接近栈尾时触发时、您有什么建议? 应该做什么?
    如果在栈溢出时触发 ISR、您有什么建议? 例如、是否可以从已知的先前良好状态恢复程序?

    此致、Holger

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

    您好、Holger、

    这主要在开发/调试期间使用。 理想情况下、不建议使用重复函数。 我们在示例中使用它来模拟栈溢出场景。 如果应用使用的栈内存比分配的栈内存多、建议增加栈大小(有足够的缓冲区)。 如果在运行时发生这种情况、我们应防止应用程序继续执行、以避免损坏其他存储器区域。 因此、我们将 ISR 配置为不在栈溢出时触发、而是在特定的阈值级别触发(因为 ISR 本身会消耗很少字节的栈)

    此致、

    Veena