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.

[参考译文] TMS570LS1224:预取中止调试

Guru**** 2538950 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1184889/tms570ls1224-prefetch-abort-debugging

器件型号:TMS570LS1224
主题中讨论的其他器件:HALCOGEN

您好!

我最近在测试难以跟踪的代码时遇到了预取中止。 这种情况一直发生在发送已知的 CAN 请求、到目前为止、该请求一直正常工作。  虽然我的调试过程导致我怀疑有标准库函数、但我尝试通过查看寄存器来验证这一点、但似乎已达到死区。

根据 基于 Hercules ARMRegisteredCortexRegistered-R4/5的微控制器(SPNA218)上的中断和异常处理 以及查看暂停时执行的存储器位置(0x0C)、我确定它是 预取中止。  由于此中止 是精确的、我应该能够确定引起中止的指令。 在技术参考手册和 Arm 文档之间、我查看了中止寄存器(SPSR_abt、R14_abt)以及 CP15故障寄存器。 他们让我相信这是 一个精确的外部中止、这是 由系统 模式下在地址0x202020执行的指令引起的。  也就是说、地址属于镜像闪存区域、但是查看存储器映射将位于 保留闪存中。  

我有损。  我的初始调试表明存在一个标准库函数问题(看起来很不可能)、但是整个 CAN 响应在 CAN IRQ 处理程序内执行、与 SPSR_abt 信息相悖、并且地址超出了可能的闪存执行范围。  此外、其他不相关和细微的更改也会影响此误差的重现可靠性

如果有任何帮助,将不胜感激

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

    在屏幕截图中、数据故障状态为0x409、指令故障状态为0x1008。  

    预取中止异常是 CPU 无法从地址提取指令。  所有预取中止 都是同步的或精确的。 但0x20202020不是闪存中指令的有效地址。  

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

    如何判断导致中止的实际指令地址是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="548843" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1184889/tms570ls1224-prefetch-abort-debugging "]发送已知的 CAN 请求一直是这样的

    此函数是否由 HALCoGen 生成? HALCOGen 也生成了 CAN ISR 处理程序吗?  如果是、请告诉我函数的名称。