是的,CoreSight 架构和 ETM 跟踪旨在支持这种崩溃分析,特别是在实时系统中,崩溃可能难以重现,并且您可能无法始终将目标设备连接到外部调试捕获设备. ETM 跟踪可以是完全非侵入式的(除了使逻辑处于活动状态的额外功耗成本)。
该架构非常通用,尽管每种实现都会对实现的内容做出不同的权衡。不幸的是,这意味着文档非常分散。您可能会发现此技术概述对上下文很有用(但不是细节)。
要实现崩溃分析,您需要涵盖以下步骤:
以循环缓冲模式配置 ETF
配置 ETM 以跟踪所有内容,并进行相当频繁的同步
崩溃后禁用 ETM(因此缓冲区不会被覆盖)
从崩溃中提取痕迹(例如到 SD 卡)
解压 ETF 添加的任何包装协议
解压trace(估计是离线)
使用循环缓冲区,跟踪解压缩只能从同步点开始。ETMv4 协议使用可变长度数据包,很少跟踪完整的 PC 地址值。您可能希望缓冲区中有 4 个同步点,那么只有前 25% 会丢失。
跟踪解压缩依赖于运行的代码映像——在这个用例中这应该不是太大的问题。
如果您在崩溃后无法缓冲足够远,则可以使用 ETM 中的过滤逻辑来排除您知道不感兴趣的任何代码。根据任何崩溃的性质,您可能需要时间信息。您可以设置一个阈值,以便每 100 个周期左右在跟踪中获得一个刻度 - 成本跟踪精度,但这可能是一个很好的线索。
对于 ETM 编程,您需要ETMv4 架构(如果您需要过滤,它使用 DWT 比较器作为“处理器比较器输入”),对于 ETF,我认为这将是本技术参考手册。检查外设 ID 寄存器中的part_number以确保您拥有正确的程序员型号。