前言

发现一款FreeRTOS可视化分析工具Tracealyzer,对FreeRTOS程序分析以及优化有帮助。

Tracealyzer介绍

Tracealyzer是Percepio 公司开发的一款用于RTOS或用于linux的嵌入式软件系统的可视化跟踪工具。提供多种可视化分析视图,不多说了,直接上图。

1
1

Tracealyzer下载

进入Percepio官网,(需要梯子) ,进入官网后选择下载

1
之后在目标平台选择FreeRTOS

1
1

填写完信息后会收到下载链接以及秘钥,下载之后一路next完成安装。之后在Tracealyzer输入秘钥完成激活

1

注意这个秘钥只有30天试用,30天到期后需要购买,个人使用推荐破解,网上有破解教程

可在官网获取移植配置教程
1

1

1

Tracealyzer移植

推荐使用F4,F1配置有些不够。

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)。注意ST-Link目前不支持流模式。

Tracealyzer移植

在KEIL工程中使用Tracealyzer,首先需要集成Tracealyzer的跟踪记录库,该记录库文件在Tracealyzer的安装目录下。

1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
│  readme.txt
│ trcKernelPort.c
│ trcSnapshotRecorder.c
│ trcStreamingRecorder.c
├─config
│ trcConfig.h // 整个Trace源码的配置文件.
│ trcSnapshotConfig.h // 快照模式配置文件,和流模式对应文件选其一
│ trcStreamingConfig.h // 流模式配置文件,和快照模式对应文件选其一
├─include
│ trcHardwarePort.h // 所有硬件依赖关系。包含几个预定义的硬件端口,包括ARM Cortex-M,PIC32,Renesas RX等。
│ trcKernelPort.h // FreeRTOS特定的定义,最值得注意的是跟踪钩子定义。
│ trcPortDefines.h // 配置文件的各种常量定义
│ trcRecorder.h // 公共API,开发者将以上两种模式进行了统一,用户使用时,只需要包含该文件即可!
└─streamports // 该文件夹下就是流模式对应的不同接口方式的实现,以下任选其一即可。最新的 4.x 中又多了几种,这里没有添加
├─Jlink_RTT
│ │ Readme.txt
│ │ SEGGER_RTT.c
│ │ SEGGER_RTT_Printf.c
│ └─include
│ SEGGER_RTT.h
│ SEGGER_RTT_Conf.h
│ trcStreamingPort.h
├─TCPIP
│ │ Readme.txt
│ │ trcStreamingPort.c
│ └─include
│ trcStreamingPort.h
└─USB_CDC
│ Readme.txt
│ trcStreamingPort.c
└─include
trcStreamingPort.h

在keil里建立以下分组
1
1

1.将trcKernelPort.c、trcSnapshotRecorder.c和trcStreamingRecorder.c 3个主要源码文件添加到工程中
2.将3个配置文件也添加到工程中,方便随时修改跟踪记录库的配置。建议每个工程分别使用一组配置文件,将trcConfig.h、trcSnapshotConfig.h和trcStreamingConfig.h复制到独立的工程目录下即可。
3.将TraceRecorder\include目录添加到头文件路径中。
4.修改配置文件trcConfig.h,删除#error “Trace Recorder: Please include your processor’s header file here and remove this line.”,并#include处理器头文件。
1
5.将硬件移植配置为Tracealyzer针对Cortex-M提供的实现。
1
6.将跟踪模式设置为快照模式(Snapshot)
trcKernelPortConfig.h中修改配置

1
7.设置所使用的FreeRTOS的版本。
1
不知道自己的FreeRTOS版本的可以查看FreeRTOS.h头文件的最上方
1
8.修改trcSnapshotConfig.h,设置快照的模式,当事件缓存满了之后停止跟踪。
1
9.设置事件缓存的大小,单位是字,这里我们设置为4000。
1
10.在FreeRTOSConfig.h配置文件中使能跟踪功能。
1
11.在main函数中调用vTraceEnable(TRC_START)初始化并使能跟踪,调用的位置须在硬件完成初始化之后,第一个内核对象创建之前(注意添加#include "trcRecorder.h"头文件)。
1

在Tracealyzer中跟踪

我们使用ST-LINK采用快照模式进行跟踪。打开Tracealyzer的快照工具
1
在快照设置里选择ST-LINK
1
点击setting进行ST-LINK的选择以及确认
1
点击Read Snapshot选项,快照模式会将程序运行跟踪到的数据缓存到指定的RAM区域中,此处设置所需要读取的RAM区域范围。可以在keil中查看芯片的RAM范围。
我使用的STM32F407ZGT6的RAM起始地址是0x20000000,大小是0x1c000
1
我们将Tracealyzer设置为对应的范围
1
进行快照读取
1
到底,我们便成功跟踪了程序的运行。
1