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:使用 CCS 调试硬故障

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1196496/tm4c1294ncpdt-debugging-hard-faults-with-ccs

器件型号:TM4C1294NCPDT
Thread 中讨论的其他器件:EK-TM4C1294XL

您好!

我在代码中遇到了许多不同的硬故障、并正在寻求有关如何充分使用 Code Composer Studio 来帮助解决这些问题的建议。

我正在使用:

CCS v11.2.0

XDS100v3

我还提供了 Tiva C 系列 Launchpad EK-TM4C1294XL Rev D

我已经阅读过以下内容: https://www.ti.com/lit/an/spma043/spma043.pdf

但不幸的是,我一直被卡住,因为 Disassembly 中的程序计数器(PC)地址只指向 FaultISR()。 此外、NVIC 故障状态寄存器显示这是一个精确的数据总线错误、总线故障地址有效、但是地址指向0x00000000、正如数据表中的存储器映射所示、该地址位于片上闪存中。  

据我所知、如果故障 ISR 不仅仅是一个简单的 while 循环、它可能需要 PC 的偏移量来找到有问题的指令、但我的代码只是一个简单的 while 循环:

static void
FaultISR(void)
{
    //
    // Enter an infinite loop.
    //
    while(1)
    {
    }
}

添加一些调试屏幕截图、以防出现以下情况:

  

对于如何实际找到违规指令的任何帮助、我们不胜感激。

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

    您好!

     很多时候、故障的主要原因有两个。 首先、您尝试访问尚未启用的外设。  例如、请参阅以下代码。 在这里、我尝试在不首先启用 TIMER0的情况下访问 TIMER0寄存 器、因为我注释掉 SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0)。 这通常是首先要检查的问题。 在访问外设时、系统将跳闸总线故障、而不首先使能该外设。  

    //
    //启用此示例使用的外设。
    //
    //SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);

    //
    //配置两个32位周期定时器。
    //
    TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);

    下一种原因是没有足够的堆栈或堆(如果使用堆进行动态内存分配)。 最常见的原因是堆栈不足。 因此、增加堆栈以查看问题是否消失。 如果函数中有递归调用、则它可以轻松快速超越栈。  

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

    感谢您的回复 Charles。

    我已检查堆栈和堆溢出、似乎有足够的空间。 我还尝试增加堆栈大小、以防万一。

    在启用外设之前、我可以告诉您没有使用任何外设。

    我认为原因不太明显、因为硬件故障似乎是随机发生的、有时是在外设初始化之前、有时是在外设初始化之后。

    我可以做些什么来使堆栈指针指向正确的方向吗?  

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

    有关更多背景信息:

    我使用这里的方法来检查堆栈溢出: https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1164811/tm4c1230e6pm-reset-of-micro/4386491#4386491

    并使用 FreeRTOS 提供的 vPortGetHeapStats()来检查堆。

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

    您好!

     我不确定导致您问题的原因是什么?

     -您的应用程序是否基于 FreeRTOS?

     -您能在另一个电路板上重复相同的故障吗?

     我不知道您的应用程序有多复杂。 您能不能通过删除某些部分并逐渐重新添加删除的部分来简化代码。 这样调试就更容易了。 您的日志似乎表明这是一个具有精确地址的总线故障、但地址为0、这是我以前未见过的。  

     -您可能希望在不同的代码位置插入一些 LOG_INFO,以便更好地评估故障发生的位置和时间

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

    您好、Charles、

    我不希望有人找到我的问题的根源、我只是希望找到更多有关如何使用程序计数器和 NVIC 寄存器来帮助调试的信息。

    我目前正在尝试您提到的最基本的故障排除方法、但我希望 CCS 可能会有一些技巧来帮助您解决此问题。

    您能告诉我、如果 PC 指向堆栈之外、它实际上是无用的吗?

    您是否知道使用 TM4C 和 CCS 进行更多硬件跟踪的方法? 与 XDS100v2不同的调试器工具是否有帮助?

    这篇文章提到了有关 GEL 脚本的一些内容、是否有更多有关这方面的信息? 我可以在本例中使用此方法吗?  

    https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/810598/ccs-tm4c1294kcpdt-how-do-i-get-the-stack-unwound-in-exception-handlers/3026599#3026599

    再次感谢、

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

    我在这里看到、7年前、TI 一直致力于提供应用手册以进行调试和跟踪、您知道该应用手册现在是否存在以及我在哪里可以找到它吗?

    e2e.ti.com/.../hardware-trace-on-tiva-series-mcu-s

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="509967" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1196496/tm4c1294ncpdt-debugging-hard-faults-with-ccs/4511447 #4511447"]

    这篇文章提到了有关 GEL 脚本的一些内容、是否有更多有关这方面的信息? 我可以在本例中使用此方法吗?  

    https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/810598/ccs-tm4c1294kcpdt-how-do-i-get-the-stack-unwound-in-exception-handlers/3026599#3026599

    [/报价]

    您好!

     您提到的由 Chester 撰写的帖子非常有用。 我实际上是自己尝试调试故障。 按照他的说明、通过查看调用栈、查看是否可以更好地了解违规指令或函数。  

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

    您好 Sasha、

     您的故障问题是否已解决? 我没有听到您的反馈。 我现在将关闭该线程。 如果您有一些更新、您可以写回此主题、它将自动重新打开。