Event Recorder 简介

之前使用过SEGGER 的 RTT 功能来替代串口打印,比较方便。只是这种方 法限制用户必须使用 JLINK 才可以。而使用 Event Recorder 的话,无此限制,各种 LINK 通吃。只要是 MDK 支持的即可。

Event Recorder 是 MDK 在 5.22 版本的时增加的功能,到了 5.25 版本后,这个功能就更加完善了, 增加了时间测量和功耗测量的功能。

此调试组件不需要用到 SWO 引脚,使用标准的下载接口即可。用到 VCC,GND, SWDIO,SWCLK 和 NRST。大家使用三线 JLINK-OB 也是没问题的,仅需用到 GND,SWDIO 和 SWCLK。

JTAG 接口和 SWD 接口区别 下图分别是 20pin 的标准 JTAG 引脚和 SWD( Serial Wire Debug)引脚,一般 SWD 接口仅需要 Vref, SWDIO,SWCLK,RESET 和 GND 五个引脚即可,SWO(Serial Wire Output)引脚是可选的。有了 SWO 引脚才可以实现数据从芯片到电脑端的数据发送。

eventfilter驱动(终极调试工具EventRecorder使用方法)(1)

JTAG 接口 SWD 接口 是由仪器化跟踪宏单元 ITM(Instrumentation Trace Macrocell)和 SWO 构成的。SWV 实现了一种 从 MCU 内部获取信息的低成本方案,SWO 接口支持输出两种格式的跟踪数据,但是任意时刻只能使用 一种。

两种格式的数据编码分别是 UART(串行)和 Manchester(曼彻斯特)。当前 JLINK 仅支持 UART 编码,SWO 引脚可以根据不同的信息发送不同的数据包。当前 M3/M4 可以通过 SWO 引脚输出以下三种 信息:

1. ITM 支持 printf 函数的 debug 调用(工程需要做一下接口重定向即可)。ITM 有 32 个通道,如果 使用 MDK 的话,通道 0 用于输出调试字符或者实现 printf 函数,通道 31 用于 Event Viewer,这 就是为什么实现 Event Viewer 需要配置 SWV 的原因。

2. 数据观察点和跟踪 DWT(Data Watchpoint and Trace)可用于变量的实时监测和 PC 程序计数器采 样。

3. ITM 还附带了一个时间戳的功能:当一个新的跟踪数据包进入了 ITM 的 FIFO 时, ITM 就会把 一个差分的时间戳数据包插入到跟踪数据流中。跟踪捕获设备在得到了这些时间戳后,就可以找 出各跟踪数据之间的时间相关信息。另外,在时间戳计数器溢出时也会发送时间戳数据包。

Event Recorder 的特色

Event Recorder 的特色主要有以下几点:

1. 提升应用程序动态执行期间的检测能力。

2. 支持的事件类型滤除机制,比如运行错误,API 调用,内部操作和操作信息的区分。

3. 可以在任务中,RTOS 内核中和中断服务程序中任意调用。

4. 对于带 ITM 功能的 Cortex-M3/M4/M7/M33 内核芯片,执行记录期间,全程无需开关中断操作。 对于不带 ITM 功能的 Cortex-M0/M0 /M23,是需要开关中断的。

5. 支持 printf 重定向。

6. 各种 link 通吃,支持 SWD 接口或者 JTAG 接口方式的 JLINK、STLINK、ULINK 和 CMSIS-DAP。 7. 对于带 DWT 时钟周期计数器功能的 Cortex-M3/M4/M7/M33 内核芯片,创建时间戳时,可以有效 降低系统负担,无需专用定时器来实现。

8. Event Recorder 执行时间具有时间确定性,即执行的时间是确定的,而且执行速度超快,因此,实 际产品中的代码依然可以带有这部分,无需创建 debug 和 release 两种版本。 9. RTX5 及其所有中间件都支持 Event Recorder 调试。

Event Recorder 是如何工作的

首先来看下面这张图:

eventfilter驱动(终极调试工具EventRecorder使用方法)(2)

在截图的左下角有个 Memory 内存区,在这个内存区里面有一个缓冲 Event Buffer,其实就是一个大数组。MDK 通过访问这个数组实现消息的图形化展示。为了正确的图形化展示,数组缓冲里面的数据 就得有一定的数据格式。而这个数据格式就是通过左侧截图里面的 Event Recorder 和 Event Filter 来实 现的。Event Recorder 的 API 实现数据记录和整理,Event Filter 的 API 实现数据的筛选,从而可以选择 哪些数据可以在 MDK 的 Event Recorder 调试组件里面展示出来。 这就是 Event Recorder 的基本工作流程。

接下来会介绍Event Recorder的各种功能测试使用方法,欢迎关注,