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.

[参考译文] TM4C129ENCPDT:遇到故障并尝试找出 PC 的指向何处

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1355972/tm4c129encpdt-getting-a-fault-and-trying-to-figure-out-where-the-pc-is-pointed

器件型号:TM4C129ENCPDT

我们的故障处理程序将异常堆栈保存到 EEPROM 中、当我们在下一次启动时查看它时、程序计数器指向0x42014aca。

您能告诉我们、这是 ROM 代码吗?有什么可能输出?

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

    您好!

     否、这不是 ROM 位置。 在大多数情况下、故障异常是由于访问尚未启用的外设或没有为动态存储器分配保留足够的存储器栈或堆。 请检查故障异常状态和地址寄存器。 他们将提供有关例外原因的其他信息。

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

    Charles

    我很确定我们没有任何外设。 这里是我们此时保存的一些其他寄存器、
    R0=0xffffffff、R1=0x20012058、R2=02e9cb、R3=0x2002c13c、R12=0x2002c4f0、 lr=0x5b4a1、pc=0x42014aca、xpsr=0x1000000

    并且设置了 FAULT_FIRMWARM_FLAG_SW_FAULT 标志、

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

    尊敬的 Jeff:

    也看起来设置了 fault_firmware_FLAG_SW_FAULT 标志

    我认为您的应用程序定义了该标志。 这是什么标志?

    Unknown 说:
    程序计数器指向0x42014aca。

    接近0x42014aca 的内存区域是0x40000000 - 0x400FFFFF 的位段别名、这是外设的内存区域。  

    我很确定我们没有任何外设。 这里是我们此时保存的一些其他寄存器、
    R0=0xffffffff、R1=0x20012058、R2=02e9cb、R3=0x2002c13c、R12=0x2002c4f0、 lr=0x5b4a1、pc=0x42014aca、xpsr=0x1000000

    我无法在没有上下文的情况下解释这些仅 R1、R2、R3。  

    请参阅数据表中的故障状态和地址寄存器、因为这些寄存器提供有关故障的额外信息。 请注意、对于上述故障、由于处理器内部存在写入缓冲、您无法依赖故障地址寄存器。 由读取操作引起的故障是精确的、并且故障地址寄存器可以很好地指示违反了的指令。  

    此应用手册对于诊断故障非常有帮助。  https://www.ti.com/lit/pdf/spma043

    如果您认为没有访问任何已启用的外设、那么最可能的故障原因是缺少存储器堆栈或堆。   

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

    此帖子解决了我们看到的重启挂起问题

    e2e.ti.com/.../5205041