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.

[参考译文] MSP432E411Y:如何在进入处理程序 HardFault 之前跟踪代码位置

Guru**** 2511985 points
Other Parts Discussed in Thread: MSP432E411Y

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1165139/msp432e411y-how-to-trace-code-location-before-entering-handler-hardfault

器件型号:MSP432E411Y

您好!  

我想知道在进入 Default_handler 之前执行了什么代码。 是否有存储上次执行代码地址的寄存器? 如果没有、我想知道如何检查 CCS。

这是我当前正在运行的示例代码。
・simplelink_msp432e4_sdk_4_20_00_12\examples\nortos\MSP432E411Y_BGAEVM\demos\outofbox_msp432e411y

谢谢、
Astro

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

    您好 Astro、

    是的、可以检查 PSR 寄存器、低8位将指示异常编号是多少。 默认情况下、它将采用十六进制格式、但您需要十进制等效值。

    完成后、请参阅 器件数据表的表6.3.3嵌套矢量中断控制器(NVIC)、并将异常编号与表上的矢量编号匹配、以找出触发了哪个外设中断。

    此致、

    Ralph Jacobi

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

    您好、 Ralph  

    感谢您的回答。

    [问题1]
    我检查了 PSR 值、异常号是0x03。 就数据表而言、它被认为是由 GPIO 端口 D 的中断引起的。我的看法是否正确?

    [问题2]
    如果我对问题1的理解是正确的、那么我们需要考虑中断发生的原因。
    目前、我正在检查以太网功能的运行情况。
    我在 SDK 中找到了使用具有以太网的 Iwip 协议栈的示例、因此我进行了一些更改并确认了操作。
    在与 DHCP 服务器交换 DHCP Ack 消息后,分配的 IP 地址不会输出,并且会发生硬故障,Default_Handler()函数进入无限循环。

    是否可以获得任何意见?

    谢谢、
    Astro

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

    您好 Astro、

    如果 PSR 处理程序中的值为0x03、则未单击默认处理程序、而是单击系统故障处理程序。 这是一种不同类型的故障。

    当您尝试访问尚未启用的外设时、最常遇到故障处理程序。

    您需要查找的是 NVIC_FAULT_STAT 和 NVIC_FAULT_ADDR 值。

     NVIC_FAULT_STAT 值全部在技术参考手册 的表2-37下提供。 FAULTSTAT 寄存器字段说明。 因此、请检查您的错误类型。

    如果  NVIC_FAULT_STAT  指示发生了精确总线故障、则可以检查  NVIC_FAULT_ADDR  以查看触发故障的器件部分。 如果 是外设、您可能会尝试在启用外设之前对其进行访问。

    如果您有与此不同的东西、请报告故障值、我可以提供进一步的指导。

    此致、

    Ralph Jacobi

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

    您好、 Ralph  

    感谢你的答复。

    MCU 具有精确的总线故障、NVIC_FAULT_ADDR 为0x00B00953。 是否可以获得任何意见?

    谢谢、

    Astro

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

    您好 Astro、

    触发故障的地址超出了典型代码执行区域、因此我怀疑发生了栈溢出。 请增大系统堆栈的大小、并查看故障是否继续发生。

    此致、

    Ralph Jacobi

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

    您好、Ralph  

    [引用 userid="189615" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1165139/msp432e411y-how-to-trace-code-location-before-entering-handler-hardfault/4396852 #4396852"]请增大系统堆栈的大小,并查看故障是否继续发生。

    我正在尝试验证是否增加了堆栈的容量以避免堆栈溢出。
    我从 CCS 基本选项中增加了堆栈大小、然后点击了构建按钮、但链接器命令文件中的堆栈大小不变。 上述步骤是否正确?

    谢谢、

    Astro

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

    您好 Astro、

    请参阅以下有关如何调整堆栈大小的信息。 它适用于不同的 MCU、但也适用于 MSP432E4的 SimpleLink SDK。 它还提供了有关应用堆栈的详细信息、以备将来需要时使用:

    https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/874238/ccs-msp432p401r-how-to-increase-stack-size-of-the-rtos-application/3234707#3234707

    此致、

    Ralph Jacobi

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

    您好、Ralph  

    这次、我们使用非 RTOS (裸机)进行开发。 就 URL 而言、它看起来像是 TI-RTOS 的堆栈调整方法。 相同的过程是否适用于非 RTOS?

    谢谢、

    Astro

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

    您好 Astro、

    对于非 RTOS /裸机、您尝试执行该操作的方式应该可以通过在 Basic Options 中的--stack_size 下更改该操作来实现。 我不认为该设置会自动更改链接器命令文件中的硬编码值、但如果您在此处提供设置、则应将其用于硬编码链接器文件中的值。

    此致、

    Ralph Jacobi