中国(深圳)国际机器视觉展览会暨机器视觉技术及工业应用研讨会→ 立即报名 ←
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 嵌入式跟踪宏单元(ETM)简介

共5条 1/1 1 跳转至

嵌入式跟踪宏单元(ETM)简介

专家
2013-01-28 10:36:24    评分

嵌入式跟踪宏单元
     粗略的讲,ETM的作用就是记录处理器做的事情并送到外面的调试器。

    由于微控制器带有大量的片内存储器,因此不能简单地通过观察外部管脚来确定处理器核是如何运行的。ETM对深嵌入处理器内核提供了实时跟踪能力。它向一个跟踪端口输出处理器执行的信息。软件调试器允许使用JTAG接口对ETM进行配置并以用户易于理解的格式显示捕获到的跟踪信息。ETM直接连接到ARM内核而不是主AMBA 系统总线。
    ETM管脚:
    TRACECLK
    PIPESTAT[2:0]
    TRACESYNC
    TRACEPKT[3:0]
    EXTIN[0]
    面对不断增长的处理器频率,先来看一下跟踪技术的一些最新发展。首先看一下在基于ARM内核的SoC设计里面的片内跟踪模块,也就是常说的ARM嵌入式跟踪宏单元(ARM ETM)。ETM定义了一个物理跟踪端口用来传输程序执行流程的信息,下面是对ETM端口的各个组成信号的简要描述。
    TRACECLK: 该信号用来同步收集跟踪信息的硬件(也就是在线调试器)和ETM。所有的IPESTAT和TRACEPKT信号都在TRACECLK信号的边沿上被采样。在不同的ETM运行模式下,该信号可以是ARM内核工作频率的两倍、一半、或者同频。
    PIPESTAT(0-2):这三个流水线状态信号表明对应每个TRACECLK时钟周期,处理器指令流水线内部事件的详细信息如指令已经执行、发生跳转等。
    TRACEPKT: 程序执行流程通过TRACEPKT信号(依ETM模式不同,可以是4、8,或者 16 针)传递出处理器。对每个非直接跳转,压缩后的跳转目的地址被包含在跟踪报文中。“非直接跳转”是个很宽泛的说法,一般是指跳转的目的地址只能在程序运行的时候才能确定的情况,如通过寄存器加载PC寄存器,预测会发生的跳转指令和异常等。这些程序执行流程信息,和源代码一起,就能够让开发工具重建完整的程序执行流程。源代码既可以通过调试器加载,也可以通过处理器的JTAG接口从内存中读取。
    不仅限于程序执行流程,ETM用户还可以有选择地在跟踪端口的输出中包括数据读写信息。在跟踪端口的输出中,可以只有地址信息(以压缩方式)或数据内容,也可以同时包括地址信息(以压缩方式)和数据读写的内容。使能对数据读写信息的跟踪后,这些信息将被cha(敏感词)ru到程序执行流程信息流中的恰当位置上。
    TRACEPKT可以是4位、8位、或者16位的格式。跟踪端口越窄,通过跟踪端口传递跟踪信息就需要越多的TRACECLK时钟周期。一般4位的TRACEPKT用来重建完整的程序执行流程已经是足够了。但是,包含数据跟踪信息后可以很快的使这个窄位宽跟踪端口超过负荷。尤其是使能了数据跟踪功能后,连续出现32比特的数据访问就很容易出现这种情况。例如,对一组寄存器执行压栈和出栈操作的时候,为了避免在跟踪端口上出现这种过负荷的情况,可以在ETM和外部的开发工具之间增加一个FIFO缓存。当频繁发生跳转和数据读写指令的时候,这个中间缓存就显得尤为重要了。
    跟踪端口的位宽和FIFO的大小都可以有很多种选择,如何正确组合这两个因素非常关键,这将有助于防止跟踪信息的丢失。对于ARM ETM,Lauterbach推荐的最低配置是8位的端口位宽和45字节的FIFO缓存大小。这个组合在绝大多数情况下可以防止跟踪信息的丢失。
    上面提到的ETM跟踪方法的优点是记录信息的媒介在CPU内核以外,这就使得CPU外部的开发工具可以包含无限大小的跟踪缓存。如果在线调试器中可以提供512MB的跟踪缓存,对打开Cache并运行在100MHz的ARM926EJ-S理器来说,可以存储1.4秒的信息,大多数嵌入式开发者都认为这个已经足够满足需求了。



关键词: 嵌入式     跟踪     单元     简介     端口     信息    

高工
2013-01-28 13:40:40    评分
2楼

学习了!!!


高工
2013-01-28 14:30:03    评分
3楼
ETM是调试的时候用得多吗?

高工
2013-01-28 14:35:08    评分
4楼
要看芯片实现了ETM模块没有,如果实现了的,则可以通过SWDO端口实现SWV,通过printf打印调试信息,STM32单片机大多数都使能了ETM功能模块的,可以在SWD模式下通过SWDO(也就是JTAG模式下的TDO管脚)在Keil中打印printf输出的调试信息,而不必浪费USART,很实用的

高工
2013-01-28 14:50:48    评分
5楼
以前都没用过这个功能,不过也有一段时间没折腾这个东西了

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]