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.
您好!
我在代码中遇到了许多不同的硬故障、并正在寻求有关如何充分使用 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。
我已检查堆栈和堆溢出、似乎有足够的空间。 我还尝试增加堆栈大小、以防万一。
在启用外设之前、我可以告诉您没有使用任何外设。
我认为原因不太明显、因为硬件故障似乎是随机发生的、有时是在外设初始化之前、有时是在外设初始化之后。
我可以做些什么来使堆栈指针指向正确的方向吗?
有关更多背景信息:
并使用 FreeRTOS 提供的 vPortGetHeapStats()来检查堆。
您好!
我不确定导致您问题的原因是什么?
-您的应用程序是否基于 FreeRTOS?
-您能在另一个电路板上重复相同的故障吗?
我不知道您的应用程序有多复杂。 您能不能通过删除某些部分并逐渐重新添加删除的部分来简化代码。 这样调试就更容易了。 您的日志似乎表明这是一个具有精确地址的总线故障、但地址为0、这是我以前未见过的。
-您可能希望在不同的代码位置插入一些 LOG_INFO,以便更好地评估故障发生的位置和时间
您好、Charles、
我不希望有人找到我的问题的根源、我只是希望找到更多有关如何使用程序计数器和 NVIC 寄存器来帮助调试的信息。
我目前正在尝试您提到的最基本的故障排除方法、但我希望 CCS 可能会有一些技巧来帮助您解决此问题。
您能告诉我、如果 PC 指向堆栈之外、它实际上是无用的吗?
您是否知道使用 TM4C 和 CCS 进行更多硬件跟踪的方法? 与 XDS100v2不同的调试器工具是否有帮助?
这篇文章提到了有关 GEL 脚本的一些内容、是否有更多有关这方面的信息? 我可以在本例中使用此方法吗?
再次感谢、
我在这里看到、7年前、TI 一直致力于提供应用手册以进行调试和跟踪、您知道该应用手册现在是否存在以及我在哪里可以找到它吗?
这篇文章提到了有关 GEL 脚本的一些内容、是否有更多有关这方面的信息? 我可以在本例中使用此方法吗?
[/报价]您好!
您提到的由 Chester 撰写的帖子非常有用。 我实际上是自己尝试调试故障。 按照他的说明、通过查看调用栈、查看是否可以更好地了解违规指令或函数。
您好 Sasha、
您的故障问题是否已解决? 我没有听到您的反馈。 我现在将关闭该线程。 如果您有一些更新、您可以写回此主题、它将自动重新打开。