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.

[参考译文] TM4C1290NCPDT:如何调试 FaultISR ()。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1391777/tm4c1290ncpdt-how-to-debug-a-faultisr

器件型号:TM4C1290NCPDT

工具与软件:

我的代码正在分支到 FaultISR()。  我花了一整天的时间尝试追踪它。  FAULT 寄存器表明它是精确的数据总线错误、并且故障地址寄存器有效。  代码正在尝试访问一个不存在的寄存器(地址为4004E048)。

我曾经希望、当发生这种情况时、回调堆栈(将显示发生错误的函数)不会显示、它只是显示"tm4c1290ncpdt_startup_ccs.c"中的代码。

是否有某种方法可以确定它是从哪里来的?

谢谢、Doug

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

    尊敬的 Doug:

     很多时候、故障是由于外设未使能就访问外设造成的。 这是我要检查的第一件事。 您也可能没有足够的堆栈内存。 增加堆栈、看看这是否会产生影响。 最后、一个简单的错误、例如为超出您分配的大小的数组编制索引。 例如、如果在一个数组中只分配了10个元素、并且您尝试写入元素11及更多元素。 最终、程序将崩溃。  

     以下是一个应用手册、指导您查找导致故障的违规指令的来源。  https://www.ti.com/lit/pdf/spma043

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

    尊敬的 Charles:

    非常令人沮丧,一直在追这个3天了。  我上面的信息是正确的、总线错误位于地址4004E048、我假定这个地址是一个外设、我的 MPU 上不存在。  使用您引用的应用手册(谢谢)、转到并查看堆栈、其中的 LR 和 PC 值看起来不像有效的地址、实际上、在备份堆栈-从20009940到20009ABF -没有任何值是有效的程序地址!

    还有其他想法吗?

    谢谢、Doug

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

    尊敬的 Doug:

     4004E048属于保留空间。 这是将生成总线错误的非法地址。 您是否仅使用 TivaWare? 您是否以任何方式以 DRM (直接寄存器操作)样式编写代码? 您能否将您的代码压缩为最简单的形式并且仍然生成故障、然后我可以看一下您的代码。  

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

    尊敬的 Charles:

    找到罪魁祸首:在 SysTick 中断中有一条语句调用 TimerValueGet (WTIMER 4_BASE、TIMER_A)、当我更改其他调用时、根据您对我先前问题的响应、从 WTIMER 更改为 TIMER、从 TIMER_A 更改为 TIMER_B

    我感到很惊讶的是 TivaWare 没有意识到我的 MPU 没有宽定时器、这一点也许可以交给 TivaWare 小组。

    谢谢、Doug

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

    很高兴你指甲问题。