1.tracealyzer 介绍

15
北京麦克泰软件技术有限公司 Beijing Microtec Research Software Technology Co. Ltd 邮箱:[email protected] 网址:www.bmrtech.com 1 / 15 1.Tracealyzer 介绍 Tracealyzer 是一个用于 RTOS 系统的跟踪和可视化分析工具,对系统运行时的行为提供了前所未有的 洞察方法。以往需要几天甚至更长时间才能解决的问题,可以使用 Tracealyzer 快速解决。加速了调试及 减少对系统验证和性能优化所需要的时间。 目前 Tracealyzer for FreeRTOS 提供了超过 30 种相互关联的运行时行为视图,包括任务调度、时间 轴、中断、任务之间的相互作用,以及从应用程序代码中记录的用户事件。Tracealyzer 作为传统调试的 补充,与传统的调试器搭配使用,提供更高层次的调试视图,非常适合理解典型的实时问题。 图(1-1). Tracalyzer 可视化跟踪 Tracealyzer 不需要额外的跟踪硬件,这意味着可以在产品部署时使用,用于捕获难以复制的错误。 Tracealyzer for FreeRTOS支持两种追踪模式:快照模式(Snapshot Mode)和流模式(Streaming Mode)。 快照模式(Snapshot Mode):将追踪数据存储在 RAM 中,然后通过 IDE 工具读取出来保存为文件,在 PC 端进行分析和显示。 流模式(Streaming Mode):将追踪数据实时传送到 PC端,目前Tracealyzer for FreeRTOS支持 Jlink- RTT、 ARM-ITM、 USB CDC、 TCP/IP、 串口等几种流模式(官方将其称为 streamports)。在 v4.2 以上的 版本可以实时跟踪和显示,之前的版本则不能实时显示跟踪数据,只能等停止跟踪后再进行查看和分析。 以上两种模式,都需要进行相关的配置,详细的配置选项请参考官方手册。 本文将通过一个简单的示例来演示如何在工程中集成 Tracealyzer,并利用 Tracealyzer 对系统进行 分析。示例使用了快照模式、J-Link RTT 和 ARM-ITM 流模式。所使用的 Tracealyzer 版本是 v4.3.1,软 件开发工具使用 IAR Embedded Workbench for ARM 8.40.1。 2.1 集成 Recorder Library (1).将 Trace recorder library 添加到工程中。library 在 Tracealyzer 的安装目录下的 \FreeRTOS\TraceRecorder 目录,将此目录复制到工程文件夹。

Upload: others

Post on 07-Jun-2022

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1.Tracealyzer 介绍

北京麦克泰软件技术有限公司

Beijing Microtec Research Software Technology Co. Ltd

邮箱:[email protected] 网址:www.bmrtech.com

1 / 15

1.Tracealyzer 介绍

Tracealyzer是一个用于 RTOS系统的跟踪和可视化分析工具,对系统运行时的行为提供了前所未有的

洞察方法。以往需要几天甚至更长时间才能解决的问题,可以使用 Tracealyzer 快速解决。加速了调试及

减少对系统验证和性能优化所需要的时间。

目前 Tracealyzer for FreeRTOS提供了超过 30种相互关联的运行时行为视图,包括任务调度、时间

轴、中断、任务之间的相互作用,以及从应用程序代码中记录的用户事件。Tracealyzer 作为传统调试的

补充,与传统的调试器搭配使用,提供更高层次的调试视图,非常适合理解典型的实时问题。

图(1-1). Tracalyzer 可视化跟踪

Tracealyzer 不需要额外的跟踪硬件,这意味着可以在产品部署时使用,用于捕获难以复制的错误。

Tracealyzer for FreeRTOS 支持两种追踪模式:快照模式(Snapshot Mode)和流模式(Streaming Mode)。

快照模式(Snapshot Mode):将追踪数据存储在 RAM 中,然后通过 IDE 工具读取出来保存为文件,在

PC端进行分析和显示。

流模式(Streaming Mode):将追踪数据实时传送到 PC端,目前 Tracealyzer for FreeRTOS支持 Jlink-

RTT、 ARM-ITM、 USB CDC、 TCP/IP、 串口等几种流模式(官方将其称为 streamports)。在 v4.2以上的

版本可以实时跟踪和显示,之前的版本则不能实时显示跟踪数据,只能等停止跟踪后再进行查看和分析。

以上两种模式,都需要进行相关的配置,详细的配置选项请参考官方手册。

本文将通过一个简单的示例来演示如何在工程中集成 Tracealyzer,并利用 Tracealyzer 对系统进行

分析。示例使用了快照模式、J-Link RTT 和 ARM-ITM 流模式。所使用的 Tracealyzer 版本是 v4.3.1,软

件开发工具使用 IAR Embedded Workbench for ARM 8.40.1。

2.1 集成 Recorder Library

(1).将 Trace recorder library 添加到工程中。library 在 Tracealyzer 的安装目录下的

\FreeRTOS\TraceRecorder 目录,将此目录复制到工程文件夹。

Page 2: 1.Tracealyzer 介绍

北京麦克泰软件技术有限公司

Beijing Microtec Research Software Technology Co. Ltd

邮箱:[email protected] 网址:www.bmrtech.com

2 / 15

Trace recorder library目录结构:

│ tracealyzer_readme.txt //版本说明等

│ trcKernelPort.c //FreeRTOS 特定功能和定义

│ trcSnapshotRecorder.c //快照记录方式的实现

│ trcStreamingRecorder.c //数据流记录方式的实现

├─config

│ trcConfig.h //recorder库主配置

│ trcSnapshotConfig.h //快照模式特定配置

│ trcStreamingConfig.h //数据流模式特定配置

├─include

│ trcHardwarePort.h //所有的硬件依赖关系定义

│ trcKernelPort.h //FreeRTOS特定的定义

│ trcPortDefines.h //配置文件各种常量的定义

│ trcRecorder.h //公共 API,开发者将以上两种模式进行了统一

│ //使用时用户只需要包含该文件

└─streamports //流模式不同接口的实现,根据实际选择使用

├─File //通过 stdio.h(fwrite)写入到文件的流端口

│ │ Readme-Streamport.txt

│ │ trcStreamingPort.c

│ └─include

│ trcStreamingPort.h

├─Jlink_RTT //用于 SEGGER J-Link的流端口

│ │ Readme-Streamport.txt

│ │ SEGGER_RTT.c

│ │ trcStreamingPort.c

│ └─include

│ SEGGER_RTT.h

│ SEGGER_RTT_Conf.h

│ trcStreamingPort.h

├─TCPIP //用于 TCP/IP网络连接的流端口,提供了 lwip示例

│ │ Readme-Streamport.txt

│ │ trcStreamingPort.c

│ └─include

│ trcStreamingPort.h

├─TCPIP_Win32 //用于在 Windows上 TCP/IP传输的流端口

│ │ Readme-Streamport.txt

│ │ trcStreamingPort.c

│ └─include

│ trcStreamingPort.h

└─USB_CDC //用于 USB CDC连接的流端口,提供

│ Readme-Streamport.txt // STM32 Cube库的 USB驱动示例

│ trcStreamingPort.c

└─include

trcStreamingPort.h

Page 3: 1.Tracealyzer 介绍

北京麦克泰软件技术有限公司

Beijing Microtec Research Software Technology Co. Ltd

邮箱:[email protected] 网址:www.bmrtech.com

3 / 15

(2).将 TraceRecorder\config 中的 3 个配置文件复制到每个工程的源码目录下,尽量不要多个工程

共用一组配置文件。

图(2-1). Library 配置文件

(3).在 IDE 中将 recorder library 中 3 个主文件添加到工程当中,为了方便,将配置文件和全部的

头文件也都添加到了工程中。

图(2-2). Library 主要的 3个源码文件

(4).设置 FreeRTOSConfig.h 中有关 Trace的选项,将下方所示的宏使能。

#define configUSE_TRACE_FACILITY 1

在 FreeRTOSConfig.h 的最后面添加下方所示的条件编译,当使能了 Trace 后包含 Tracealyzer

library的主头文件(只在 C编译器中包含)。

#ifdef __ICCARM__

#if ( configUSE_TRACE_FACILITY == 1 )

#include "trcRecorder.h"

#endif

#endif

Page 4: 1.Tracealyzer 介绍

北京麦克泰软件技术有限公司

Beijing Microtec Research Software Technology Co. Ltd

邮箱:[email protected] 网址:www.bmrtech.com

4 / 15

2.2 使用快照模式

(1).打开 trcConfig.h,针对 Cortex-M架构包含处理器的头文件,为了识别 ARM CMSIS的 API。

(2).将硬件移植的配置为 Tracealyzer提供的、针对 Cortex-M的实现。

#define TRC_CFG_HARDWARE_PORT TRC_HARDWARE_PORT_ARM_Cortex_M

(3).配置为快照模式。将 TRC_CFG_RECORDER_MODE定义为 TRC_RECORDER_MODE_SNAPSHOT。

(4).指定所使用的 FreeRTOS版本。

(5).针对快照模式的特别设置。打开 trcSnapshotConfig.h,针对快照模式进行设置。

TRC_CFG_SNAPSHOT_MODE用于指定当 Trace的 buffer 写满之后的处理方式。

TRC_SNAPSHOT_MODE_STOP_WHEN_FULL:当 buffer 满了之后停止 Trace,可以保留起始时 Trace 到的

事件。

TRC_SNAPSHOT_MODE_RING_BUFFER:当 buffer 满了之后,覆盖之前的 Trace 数据,可以保留最后的

Trace到的事件。

(6).根据可用 RAM 空间的,设置 Event buffer 的大小,单位是字。Buffer越大,可跟踪系统运行的

时间越长。

#define TRC_CFG_EVENT_BUFFER_SIZE 8000

Page 5: 1.Tracealyzer 介绍

北京麦克泰软件技术有限公司

Beijing Microtec Research Software Technology Co. Ltd

邮箱:[email protected] 网址:www.bmrtech.com

5 / 15

(7).在代码中合适的位置调用 vTraceEnable(TRC_START)开启跟踪系统的运行。调用的时机需要注意,

须在硬件初始化完成之后,且在创建第一个 FreeRTOS 内核对象之前。

经过以上的配置之后就可以构建工程,下载程序到硬件上运行。之后需要将 Trace的 Event buffer从

硬件上读取到 PC端并保存成文件,一般可以有两种方式可以实现。

a.利用 J-link调试器,直接在 Tracealyzer“Take Snapshot”读取芯片 RAM中的 Trace数据。需要

设置芯片的型号,起始地址和读取的字节数,读取的地址范围须包含完整的 Trace buffer。

图(2-3). 设置 J-link 读取 RAM 范围

b.借助 IDE提供的内存转存储功能,IAR EWARM、Keil MDK都有此功能。例如在 IAREWARM中,首先通过

watch窗口查看 RecorderDataPtr 来获取 Trace buffer的地址,然后在 memory窗口右键选择“memory

save”输入 buffer的地址范围,保持成 Hex 文件。

图(2-4). 手动保存 buffer 为文件

IAR EWARM 还可以借助其 C-SPY 调试的宏来实现快速保持 buffer 数据。将下方内部保持为 macro 文

件,例如"save_trace_buffer.mac"。

__var start;

__var end;

save_trace_buffer()

{

start = __smessage "Memory:0x",RecorderDataPtr:%x;

end = __smessage "Memory:0x",(RecorderDataPtr + 1):%x;

__memorySave(start,end,"intel-extended", "$PROJ_DIR$\\trace.hex");

return 0;

}

Page 6: 1.Tracealyzer 介绍

北京麦克泰软件技术有限公司

Beijing Microtec Research Software Technology Co. Ltd

邮箱:[email protected] 网址:www.bmrtech.com

6 / 15

打开工程的 Options -> Debugger -> Use Macro File(s),选择之前保存的 macro文件。

图(2-5). 选择 Macro 文件

进入调试环境后,从 View->Macros->Debugger Macros,找到之前编写的宏函数,在其上面右键,选

择“Add to Quiklaunch Windows”。

图(2-6). 添加宏函数到 Quicklaunch 窗口

在之后需要保存 buffer时,从 View->Macros->Macro Quiklaunch,在添加的宏函数前面的 图标

双击,即可自动保存成 hex文件。此外也可以设置断点来触发宏的执行,或者每次程序执行停止都执

行。

图(2-7). 执行宏函数保存 buffer

Page 7: 1.Tracealyzer 介绍

北京麦克泰软件技术有限公司

Beijing Microtec Research Software Technology Co. Ltd

邮箱:[email protected] 网址:www.bmrtech.com

7 / 15

(8).加载 Trace文件。启动 Tracealyzer软件,从 File->Open File 选择保存的 Hex文件打开。

图(2-8). 加载 Trace 文件

图(2-9). 包含 Trace 数据的 hex 文件

(9).根据跟踪到的事件对系统进行分析。

2.3 使用 Jlink-RTT 流模式

(1).将 streamports下 J-Link_RTT内的源文件加入到工程。

图(2-10). J-Link RTT 实现的源文件

Page 8: 1.Tracealyzer 介绍

北京麦克泰软件技术有限公司

Beijing Microtec Research Software Technology Co. Ltd

邮箱:[email protected] 网址:www.bmrtech.com

8 / 15

(2).配置为流模式。打开 trcConfig.h,将 TRC_CFG_RECORDER_MODE 定义为

TRC_RECORDER_MODE_STREAMING

(3).在源码中合适的位置调用 vTraceEnable()启用跟踪。流模式环境下 vTraceEnable有两个参数可

以选择:

TRC_INIT:初始化并直接开始 Trace;

TRC_START_AWAIT_HOST:等待 Tracealyzer 按下“Start”按钮才开始启动系统,否则会一直等待。

如果想尽可能从系统开始运行时间开启 Trace,选择 TRC_START_AWAIT_HOST。

(4).开始实时跟踪。启动 Tracealyzer,从 File->Settings->J-Link Settings 设置调试器所使用的

接口和芯片型号。

图(2-11). J-Link 设置

在 PSF Streaming Settings,设置 Target Connection为:SEGGER RTT,使用 J-Link RTT通讯机

制,将 Trace数据从目标板经过 J-Link调试器传送到 PC端软件。

Page 9: 1.Tracealyzer 介绍

北京麦克泰软件技术有限公司

Beijing Microtec Research Software Technology Co. Ltd

邮箱:[email protected] 网址:www.bmrtech.com

9 / 15

图(2-12). 设置流模式的连接方式

(5).运行目标平台程序,点“Start Recording”图标打开 Live Stream 窗口,点“Start Session”

按钮即可开始实时跟踪。

图(2-13). 连接和开始

图(2-14). 实时跟踪过程

Page 10: 1.Tracealyzer 介绍

北京麦克泰软件技术有限公司

Beijing Microtec Research Software Technology Co. Ltd

邮箱:[email protected] 网址:www.bmrtech.com

10 / 15

2.3 使用 ARM-ITM流模式 CortexM3/M4/M7等架构的芯片可能会配有 ITM(Instrument Trace Macrocell),来打包和传输 DWT产

生的事件。ITM有 32个通道,通过 SWO进行串行传输。借助 ITM来实现流模式的数据传输,可以不受调

试的限制,只要 IDE使用的调试器支持 SWO调试都可以使用,但推荐使用速率较高的调试器。

(1).将 ARM-ITM流模式实现的代码添加到工程。

图(2-15). ARM ITM 实现的源文件

(2).配置 trcConfig.h,参考前面的 J-Link RTT流模式的配置。

(3).确定芯片的 SWO引脚有连接到调试端口,且中工程设置中选择 SWD的调试接口。

图(2-16). 设置调试接口

(4). 启动 Trace 须使用 vTraceEnable(TRC_START)。

(5).进入 IAR EWARM的调试环境,点击上方的 SWO配置图标,打开 SWO设置。

图(2-17). 打开 EWARM 的 SWO 配置窗口

Page 11: 1.Tracealyzer 介绍

北京麦克泰软件技术有限公司

Beijing Microtec Research Software Technology Co. Ltd

邮箱:[email protected] 网址:www.bmrtech.com

11 / 15

设置正确的 CPU时钟,并勾选所使用的 ITM 通道,默认使用通道 1,确认之后退出并关闭 IAR

EWARM。

图(2-18). EWARM SWO 设置

(6).从工程目录下的 settings目录,打开工程的*.dnx文件(EWARM 7.x的格式为*.dni)

图(2-19). dnx 文件

将 ITMLogFile改成如下所示:

<ITMlogFile>\\.\pipe\Tracealyzer</ITMlogFile>

保存文件后再打开 IAR,进入调试查看 SWO中的设置界面进行确认。

Page 12: 1.Tracealyzer 介绍

北京麦克泰软件技术有限公司

Beijing Microtec Research Software Technology Co. Ltd

邮箱:[email protected] 网址:www.bmrtech.com

12 / 15

(7).启动 Tracealyzer,将 PSF Streaming Settings的 Target Connection设置为 Name Pipe,

Name保持与 EWARM *dnx中设置的一致。EWARM与 Tracealyzer利用 Windows进行通信机制传递数据,利

用 EWARM来实时获取跟踪数据。

图(2-20). 设置流模式的连接方式

(8).开启实时跟踪。需要先启动 Tracealyzer,Live Stream窗口中点“Start Session”之后,

EWARM再进入调试。

IAR 实现 ARM ITM 流模式的具体设置步骤可以参考:

https://percepio.com/wp-content/uploads/2018/07/Percepio-Application-Note-PA-023.pdf

Keil MDK实现 ARM ITM流模式参考:

https://percepio.com/wp-content/uploads/2018/05/Percepio-Application-Note-PA-021.pdf

Page 13: 1.Tracealyzer 介绍

北京麦克泰软件技术有限公司

Beijing Microtec Research Software Technology Co. Ltd

邮箱:[email protected] 网址:www.bmrtech.com

13 / 15

3.Tracealyzer 可视化分析

全部的 Trace视图可以从 All Views窗口中查找,在图标上双击即可打开对应的视图窗口。也可以从

菜单栏 Views窗口打开需要的视图窗口。鼠标按住窗口的标签可以拖拽窗口,实现自定义布局。

图(3-1). All Views

1.Trace View,Vertical

垂直时间轴视图,每个任务和 IRQ占据一列,按照优先级从低到高依次往右排列,中断在所有的任

务的右边。每一列上的色块表示一个实例(Actor,一次任务或中断的执行)。

图(3-2). Trace View,Vertical

Page 14: 1.Tracealyzer 介绍

北京麦克泰软件技术有限公司

Beijing Microtec Research Software Technology Co. Ltd

邮箱:[email protected] 网址:www.bmrtech.com

14 / 15

2.Event Log

事件记录视图,记录了全部的内核事件。双击某个事件会自动关联 Trace View对应的实例。

图(3-3). Event Log

3.Istance Details

Trace Views视图中双击某个实例,Istance Detail将显示与该实例相关的时间、事件和 CPU 使用

率等信息。

图(3-4). Istance Details

Page 15: 1.Tracealyzer 介绍

北京麦克泰软件技术有限公司

Beijing Microtec Research Software Technology Co. Ltd

邮箱:[email protected] 网址:www.bmrtech.com

15 / 15

4.Communication Flow

以图形化的方式显示系统中的通讯流,如信号量、消息队列。

图(3-5). Communication Flow

5.CPU Load Graphs

CPU 使用率视图。以每间隔一段时间间隔,统计出间隔时间内的各个任务的 CPU 使用率。

图(3-6). CPU Load Graphs

请参考产品手册获取更多的视图和功能的使用。