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.

[参考译文] TMS570LC4357:调试时数据中止

Guru**** 2539500 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/858342/tms570lc4357-data-abort-when-debugging

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

您好!

我最近遇到了一个我正在努力解决的问题。

在后台、我们开发了一个位于闪存组0中的自定义引导加载程序、并通过链接器命令脚本修改了应用程序的内存分配、以使用闪存组1。 这项计划在过去一年左右一直保持稳定,运作可靠。 但是,几个月前,Halcogen 的更新(4.7.0 -> 4.7.01)导致了一些引导加载程序<-->应用程序问题。 在这里我不会详细介绍、但我们找到的解决方案是修改应用程序中的 hL_sys_startup.c 以执行必要的初始化、因为引导加载程序将清除任何复位源。 让我们调用  Halcogen 更新前的应用程序 v1.0和   Halcogen 更新后的应用程序 v2.0。  应用程序 v2.0已经过测试、看起来稳定。

现在、我们今天看到的问题是、当使用调试器时、我们在应用程序 v2.0中遇到数据中止异常、而不是应用程序 v1.0。 此中止是可重复的、我能够收集以下数据:

  • 当尝试读取外设寄存器(ADC、N2HET 等)时、总是会发生中止
  • DFSR 读取0x00001008、表示在读取期间 AXI 从器件进行外部复位
  • DFAR 读取0xFFF7C004。 读取 ADC1的 OPMODECR 寄存器时会发生中止。
  • 辅助 DFSR 读取0x0050000、这表示 AXI 外设端口导致了中止

奇怪的是、这仅在调试时发生。 在构建应用程序和通过引导加载程序进行编程时、未出现此问题。 此外、此问题在应用程序 v1.0中未出现。

一些其他信息:

  • 我们使用的是 Hercules LaunchPad 本机的 XDS110调试探针
  • 我的 CCS 环境似乎已损坏。 出于某种原因、我必须修改我的每个项目、并在调试/刷写时手动向闪存中添加二进制映像(以前、这是自动处理的)。 我不确定如何/为什么。 我唯一的猜测是我安装了一些 Hercules 示例项目、其中包括"nowFlash"安装、看起来像是一个传统的微控制器闪存应用。 也许这在 CCS 环境中有挂钩?

请提供任何帮助。

谢谢、

James

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

    尊敬的 James:

    您的测试序列是否会产生问题:

    引导加载程序位于第一个扇区的闪存中

    2.您可以通过 CCS 而不是引导加载程序将应用程序映像编程到应用程序区域(而不是第一个扇区)

    CCS 系统复位、  

    4.通过引导加载程序将代码跳转到应用程序(JTAG 仍处于连接状态)

    5.读取 ADC1的 OPMODECR 寄存器时获取中止。

    但从引导加载程序引导时没有问题

    引导加载程序位于闪存中

    2.应用程序映像通过引导加载程序编程到应用程序区域

    3.更新应用程序映像后的系统复位或软件复位  ----无 JTAG 连接

    4.代码跳转到应用程序,并执行应用程序代码  -无 JTAG 连接

    此问题可能是由 CCS 和仿真器驱动程序引起的。 能否重新安装整个 CCS 软件包?

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

    您好 QJ、

    感谢你的答复。 我实际上能够解决这个问题、这是由于我的应用程序未在启动例程中正确处理调试复位。  

    谢谢、

    James