1.tracealyzer 介绍
TRANSCRIPT
北京麦克泰软件技术有限公司
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 目录,将此目录复制到工程文件夹。
北京麦克泰软件技术有限公司
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
北京麦克泰软件技术有限公司
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
北京麦克泰软件技术有限公司
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
北京麦克泰软件技术有限公司
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;
}
北京麦克泰软件技术有限公司
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
北京麦克泰软件技术有限公司
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 实现的源文件
北京麦克泰软件技术有限公司
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端软件。
北京麦克泰软件技术有限公司
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). 实时跟踪过程
北京麦克泰软件技术有限公司
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 配置窗口
北京麦克泰软件技术有限公司
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中的设置界面进行确认。
北京麦克泰软件技术有限公司
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
北京麦克泰软件技术有限公司
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
北京麦克泰软件技术有限公司
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
北京麦克泰软件技术有限公司
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
请参考产品手册获取更多的视图和功能的使用。