经过繁重的测试、我看到我的代码在 FaultISR 中最终出现了几次精确的数据总线错误。 在过去、我发现"在 Stellaris 微控制器中诊断软件故障"文档(AN01286)非常有用。 但是、在尝试完本文档中的所有内容后、我仍然会遇到这个问题。
当处于 FaultISR 函数中时、内核寄存器、故障寄存器和堆栈内存显示如下。
程序计数器不是代码的实际部分。 如下所示为 TM4C129XNCAD 数据表中的存储器映射、这将位于 SRAM 中。 此外、故障地址(0x20040000)也在 SRAM 中。 但是、请注意、尽管存储器映射中说 SRAM 从0x2000000到0x2006FFFF、但我相信有效区域将仅从0x20000000到0x2003FFFF、因为 TM4C129XNCAD 数据表中指出微控制器具有256K 的内部存储器(数据表的第8节、第633页) 我的 tm4c129xnczad.cmd 文件的 SRAM 长度指定为0x00040000。
堆栈上的链接寄存器(0x0000A001)确实指向实际代码(如下图所示)。 但是、据我所知、TCPLogWrite 函数中的代码是无害的。
问题:
- 0x20040000的总线故障是否表明我已超限数据区域? 例如、如果我通过一个数组进行索引、并在很大程度上越过最后一个索引到 SRAM 区域之外的点(即到达内存地址0x20040000)、我可能会得到什么结果?
- 可以肯定地说、问题可能发生在 TCPLogWrite 函数中、还是 LR 可能是一个红色的错误?
提前感谢任何人可能有的任何想法。