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.

[参考译文] TM4C123GH6PM:在某些情况下、无法使用调试器读取已启用外设的子集#39存储器

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/967708/tm4c123gh6pm-unable-to-read-a-subset-of-an-enabled-peripheral-s-memory-with-a-debugger-in-certain-cases

器件型号:TM4C123GH6PM

您好!

我尝试调试发生故障的 UART、但在调试 UART 的外设存储器时遇到问题。

在我的器件运行几天之后、它不再响应通过 UART 发出的请求、因此我一直在尝试对此进行调试。  我已经验证了 UART 数据以电气方式正确地传输到 UART2引脚、因此我发现这是固件问题。  我连接了一个调试器、发现不再触发 UART ISR。  固件会在各个点启用和禁用 UART RX 和 TX 中断、因此我认为某些地方存在竞态条件、RX 中断无法重新启用、因此我尝试确认或证明这一点。

我检查了 NVIC 寄存器、以确保 UART2中断仍然被启用、也就是被启用。  然后、我检查 UART2外设存储器以查看它启用了哪些中断源、但我无法读取我需要的存储器。  我使用 Eclipse、GDB 和 OpenOCD 来连接到板。  我看到的是、我可以从 UART2的基址读取它的外设存储器、并从偏移量0x00读取到偏移量0x2C、但所有其他存储器都显示为????????????? 。  我认为这通常意味着存储器不存在、或超出可读范围等、或者可能是外设被禁用。  我假设外设已启用、因为它可以工作一段时间、然后停止、并且外设不会在代码中的任何位置被禁用。

我可以从0x00到0x2C 读取的存储器是我所期望的。  我可以看到 UART 数据寄存器中的数据发生了变化、因此 UART 似乎已启用并正在接收数据。  我可以看到数据寄存器和接收状态寄存器中的溢出位被置位(这正是我希望看到 ISR 是否不输出数据的结果)。  但我无法读取偏移量0x38以查看哪些中断被屏蔽、也无法读取偏移量0x3C 以查看原始中断状态等  我还可以成功读取我正在使用的其他 UART 的所有相关存储器、这只是我最感兴趣的存储器、我不能这么做。

重新启动电路板后、我可以正确读取这些存储器位置、但在重新启动后、UART 恢复工作、因此我不太感兴趣。

我不确定我会缺少什么或我可以检查的其他内容。  除了外设被禁用之外、还有一些内存可能无法读取的情况吗?  下次发生时、我可以再次确认外设已启用、但如果启用、我不确定要查看的其他位置。

谢谢、

查尔斯

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

    您好、Charles、

    当您说 Eclipse 时、您在这里指的是 Code Composer Studio? 如果是、我可以尝试与我们的 CCS 专家核实可能发生的情况。

    我想不到这样的情况:我之前已经看到过您通常能够读取的寄存器的特定行为。

    您还使用什么调试探针?

    您能否发布内存浏览器中所见内容的屏幕截图?

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

    您好、Ralph、

    感谢您的回答。

    遗憾的是、我使用的是香草 Eclipse CDT (2020-12 (4.18.0))、以及 KT-link 克隆 JTAG 调试器。  我的 GDB 是 GNU gdb (GNU Arm 嵌入式工具链10-2020-Q4-Major) 10.1.90.20201028-git。

    我已经下载了 CCS、并将研究如何使其正常工作。  从发行说明中可以看到、我的调试器似乎不能与它配合使用、但我确实有一些 Tiva LaunchPad、我相信我在多年前将其用作独立调试器、我认为我可以使用它。

    我认识到使用不受支持的工具链您的帮助能力有限、但请注意、您希望我能够读取这些寄存器; 我主要想知道在其他情况下、通过 JTAG 进行的存储器读取可能不起作用、但它似乎应该起作用。  我尝试断开并重新连接到目标、删除并重新创建存储器视图、在该区域尝试不同的存储器地址、然后恢复和暂停执行、所有结果都相同。

    目标仍在运行、但如果失败、接下来我将使用我们的设置和 CCS 进行更多实验、看看会发生什么情况。  我们还将设置更多单元进行长期测试、以了解我们遇到该问题的频率、 尽管我在记忆中确实看到了我确信这是一个中断重新启用问题、但在走这条路之前、最好先知道这一点。

    此致、

    查尔斯

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

    您好、Charles、

    是的、我不认为 CCS 将支持该 JTAG 调试器。 您可能能够让 XDS200代替您的电路板工作。

    如果您可以在 LaunchPad 上重现它、那会很好、因为我可以深入探究它。

    请告诉我您尝试使用 CCS 的结果是什么、IDE 可能不希望这些位置有值、也不会尝试读取这些值? 我不确定如何实现对 TM4C 的支持。

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

    您好、Ralph、

    我无法重现内存读取问题。  当 UART 问题再次出现时、我能够直接通过 GDB 和 IDE 成功读取存储器、因此我认为、这只是 Fluke 的某种形式、它最初无法正常工作。

    感谢您的帮助!

    查尔斯

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

    您好、Charles、

    明白了、很高兴听到 IDE 片段至少在工作、祝您在调试/分析中一切顺利!