gpt4 book ai didi

c - 在 STM32H7 上使用执行跟踪片上缓冲区 (ETB)

转载 作者:太空宇宙 更新时间:2023-11-04 06:45:44 26 4
gpt4 key购买 nike

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

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

还有this link在 ARM 信息中心,但我发现它特别不清楚。

如何使用 ETB?

编辑:感谢 STMicro 的介绍,我稍微澄清了情况。它声明“ETF 可用作跟踪缓冲区,用于在芯片上存储跟踪。跟踪可以由软件或调试器读取,或通过跟踪端口刷新。如果配置为循环缓冲区,跟踪将被连续存储,因此最近的跟踪将覆盖最旧的。或者,FIFO 满标志可以用于在缓冲区已满时停止跟踪,因此在特定时间点捕获跟踪。”所以我需要访问的不是 ETB 而是 ETF,这是通过寄存器完成的(FIFO 显然不是内存映射的?)

最佳答案

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

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

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

  1. 循环缓冲模式配置ETF

  2. 配置 ETM 以相当频繁的同步来跟踪所有内容

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

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

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

  6. 解压痕迹(大概是离线的)

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

Trace 解压缩依赖于正在运行的代码图像 - 在这个用例中这应该不是什么大问题。

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

为了对 ETM 进行编程,您需要 ETMv4 architecture (如果您需要过滤,它使用 DWT 比较器作为“处理器比较器输入”),对于 ETF,我认为这将是 technical reference manual .检查外设 ID 寄存器中的 part_number 以确保您拥有正确的编程器型号。

关于c - 在 STM32H7 上使用执行跟踪片上缓冲区 (ETB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58220113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com