0

在某些特定情况下,我需要输出片上缓冲区 (ETB) 执行跟踪。我说的是操作功能,而不是调试阶段的 ETM 跟踪。

我已阅读Arm® CoreSight™ ETM-M7 技术参考手册,但几乎没有关于使用此 ETB 功能的详细信息。

ARM Information center上也有这个链接,但是我发现特别不清楚。

如何使用 ETB?

编辑:由于 STMicro 的介绍,我澄清了一点情况。它指出“ ETF 可用作用于在芯片上存储跟踪的跟踪缓冲区。跟踪可以由软件或调试器读取,或通过跟踪端口刷新。如果配置为循环缓冲区,则跟踪将被存储_ 所以我需要访问的不是 ETB,而是 ETF,这是通过寄存器完成的(FIFO 显然不是内存映射的?)

4

2 回答 2

3

的,CoreSight 架构和 ETM 跟踪旨在支持这种崩溃分析,特别是在实时系统中,崩溃可能难以重现,并且您可能无法始终将目标设备连接到外部调试捕获设备. ETM 跟踪可以是完全非侵入式的(除了使逻辑处于活动状态的额外功耗成本)。

该架构非常通用,尽管每种实现都会对实现的内容做出不同的权衡。不幸的是,这意味着文档非常分散。您可能会发现此技术概述对上下文很有用(但不是细节)。

要实现崩溃分析,您需要涵盖以下步骤:

  1. 以循环缓冲模式配置 ETF

  2. 配置 ETM 以跟踪所有内容,并进行相当频繁的同步

  3. 崩溃后禁用 ETM(因此缓冲区不会被覆盖)

  4. 从崩溃中提取痕迹(例如到 SD 卡)

  5. 解压 ETF 添加的任何包装协议

  6. 解压trace(估计是离线)

使用循环缓冲区,跟踪解压缩只能从同步点开始。ETMv4 协议使用可变长度数据包,很少跟踪完整的 PC 地址值。您可能希望缓冲区中有 4 个同步点,那么只有前 25% 会丢失。

跟踪解压缩依赖于运行的代码映像——在这个用例中这应该不是太大的问题。

如果您在崩溃后无法缓冲足够远,则可以使用 ETM 中的过滤逻辑来排除您知道不感兴趣的任何代码。根据任何崩溃的性质,您可能需要时间信息。您可以设置一个阈值,以便每 100 个周期左右在跟踪中获得一个刻度 - 成本跟踪精度,但这可能是一个很好的线索。

对于 ETM 编程,您需要ETMv4 架构(如果您需要过滤,它使用 DWT 比较器作为“处理器比较器输入”),对于 ETF,我认为这将是本技术参考手册。检查外设 ID 寄存器中的part_number以确保您拥有正确的程序员型号。

于 2019-10-09T11:57:22.197 回答
0

通常,您将 ETB 与支持 ETB 的硬件调试器一起使用,例如 Segger J-TraceKeil uLinkPro。这通常是工具供应商担心的事情,并且不能直接在您的应用程序中使用。

必要的跟踪引脚(TRACED0 到 TRACED3 和 TRACECLK)需要在您的调试头上可用,并且不能由您的应用程序多路复用到其他一些功能。

STM32H7 参考手册包含关于“跟踪和调试子系统”的整个部分(您没有指定确切的部分,因此您必须自己找到它)。但在 STM32H745/755 和 STM32H747/757 的 RM0399 中,我正在查看它占据了 100 多页的手册。

于 2019-10-03T18:36:02.913 回答