是否需要了解STM跟踪和ETM跟踪之间的区别?还想了解Coresight设备中的源,接收器,链接吗?
请分享这些查询的任何链接/博客
答案 0 :(得分:1)
有一个介绍性的“ CoreSight Technical Introduction”,但这更旨在为SoC设计人员提供一些背景信息。但是,我可以尝试在此处提供一些针对开发人员的信息。
STM
或ITM
都是软件驱动的跟踪源(实际上是优化/专用的UART)。在Cortex-M中,有一个额外的硬件跟踪层,它可以通过某种方式补偿较小部分中不存在性能监视器计数器的情况。可以快速访问STM,并且软件可以将原始有效负载转储到特定的通道。这比UART的开销要低(并且应该安排带宽以允许进行流式写入而不必担心握手。这种跟踪的捕获通常内置在低端工具中。
ETM
要复杂得多。它提供了实时的程序执行流的非侵入式视图。除了Cortex-R以外,这通常仅是指令流,并且该流被大量压缩。根据设备的不同,可能会选择在流中包含计时信息。 ETM跟踪用于概要分析,代码覆盖以及诊断困难问题或竞争状况(因为采用的异常序列等是明确的)。
ETM还具有触发逻辑,可帮助将捕获范围缩小到特定的目标序列。
CoreSight是用于实现跟踪/调试的体系结构和一组组件。在此术语中,STM
和ETM
是跟踪源。它们通过基于字节的协议在宽总线上传输跟踪数据。挑战正在从芯片中提取此数据。数据既可以存储在缓冲区中,以后再通过调试接口读出,也可以实时传输。小型Cortex-M器件通常具有4位跟踪端口,该端口至少需要运行在核心频率的一半才能跟上。基本的4/8/16/32位跟踪端口的捕获硬件非常重要,因为它们通常在高频下运行。
在CoreSight术语中,跟踪接收器是存储或导出跟踪数据的端点。外部跟踪端口,跟踪到内存的桥或片上缓冲区。
跟踪链接是互连的一部分(除了具有可配置的路由之外,大多数仅对设计人员可见)。链接可以是1:n或n:1连接,时钟/电源桥或fifos。
跟踪/调试旨在供外部(替补)使用和自托管用例(只要有一个软件可访问的缓冲区)即可。如果需要,可以通过操作系统将后者公开给用户空间。
软件驱动的跟踪源的目的是允许开发人员将printf
之类的功能嵌入其代码中。当然,到uart的printf昂贵,存在巨大的库开销(在嵌入式应用程序中),函数调用和格式化成本,用于uart的异常处理程序等。STM跟踪可能要琐碎得多。在代码的关键位置,只需将一个存储到STM通道地址即可发送一条消息(因此开销大约为2-3条指令)。可以禁用通道,这使得消息传递对时序的影响是静态的(即使在生产代码中也是如此)。工具可以将消息标记化,以获得更好的用户体验(我想您的大多数调试printf都是静态消息)。由于捕获硬件可以轻松地与调试探针集成在一起,因此在Cortex-M中使用ITM受到了很好的支持。尽管此跟踪是实时的,并且开销很低,但是减小了粒度,并且开发人员需要修改关键代码节以包含检测跟踪。