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.

[参考译文] TM4C1294NCPDT:无效状态用法故障(INVSTAT)

Guru**** 2549920 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/994952/tm4c1294ncpdt-invalid-state-usage-fault-invstat

器件型号:TM4C1294NCPDT

您好!

我在代码中遇到问题、遇到 INVSTAT 故障。 我一直在尝试  TI 提供的故障诊断以对其进行调试、但我无法到达任何地方。

我的 NVIC_FAULT_STAT = 0x00020000、表示其 INVSTAT 故障。

根据文档、我读取我的 MSP 值、即0x2002EEC0

我无法精确定位导致问题的指令。 我可以重新创建问题、因为我运行了一个 http 服务器、当从网页接收数据时、该服务器发生故障。 如果我不从网页发送数据、则效果非常好、没有问题。

是否有人可以帮助我调试这个问题或帮助我获取这个问题的起源说明? 是否有人遇到过相同的问题?

谢谢你。

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

    最常见的原因是堆栈溢出或损坏。 您是否尝试过增大堆栈大小?

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

    是的。 这没用。 MSP 的价值有什么帮助吗?

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

    主堆栈指针的值表明它仍然在 RAM 中。 我建议您首先查看异常堆栈指针、并按照  故障诊断第3.5节中的说明识别导致故障的指令。如果该指令从堆栈加载 PC、则查看 MSP 指向的内容。 变量溢出可能会导致堆栈损坏。

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

    尊敬的 Bob:

    感谢您的回答。 我尝试了这种方法、对值有点困惑。 我已附上核心寄存器和内存浏览器的屏幕截图。

    它是否有助于找到原因?

     

    我仍然无法访问导致问题的指令。 任何帮助都很好。 谢谢你。

    -Deepak

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

    这为我们提供了线索。 从堆栈中、我们看到前一台 PC 为00000000。 这显然是一个问题、因为这是初始堆栈指针的位置、而不是有效的指令。 这就是 INVSTAT 故障的原因。 但它是如何实现的? 之前的值(0001BD73)是发生故障时的连接寄存器。 它可能包含函数调用的地址、可能是间接调用。 您可以在该位置进行反汇编吗? 如果加载了符号、通过在反汇编中向后滚动、您可以找到函数的名称。