基于 SEGGER SystemView 的系统行为分析
SEGGER SystemView 是一款实时记录和可视化工具,用于分析应用程序运行时的行为(任务调度、中断、系统事件)。在 esp_trace 模型中,SystemView 以 编码器 的形式提供:它将 FreeRTOS 和应用程序事件格式化为 SystemView 协议,数据则由 传输 层(通常为 JTAG 上的 apptrace,或用于实时查看的 UART)传送到主机。
工具详情请参阅 SystemView。
启用 SystemView
SystemView 功能由托管组件 espressif/esp_sysview 提供。完成以下步骤后才会显示 SystemView 配置菜单:
在
idf_component.yml中添加组件依赖:dependencies: espressif/esp_sysview: ^1
在 menuconfig 中选择外部库:
Component config>ESP Trace Configuration>Trace library>External library from component registry。
之后,可通过 Component config > SEGGER SystemView Configuration 配置 SystemView。该菜单可用于选择时间戳源 (CONFIG_ESP_TRACE_TIMESTAMP_SOURCE)、单独启用或禁用 SystemView 事件收集 (CONFIG_SEGGER_SYSVIEW_EVT_XXX),以及在使用 UART 目标时选择要跟踪的 CPU。
备注
完整的最新配置选项和主机端设置,请参阅组件 README:esp_sysview。
想要通过 UART 接口进行实时跟踪,请首先在 Component config > ESP Trace Configuration > Application Level Tracing 中选择 UART 作为目标传输方式。然后在 Component config > ESP Trace Configuration > SEGGER SystemView 中选择 Pro 或 App CPU。
OpenOCD SystemView 跟踪命令选项
通过 JTAG 跟踪时,使用专用的 OpenOCD 命令收集数据。OpenOCD/JTAG 设置请参阅 JTAG 调试。
命令用法:
esp sysview [start <options>] | [stop] | [status]
子命令:
start开启跟踪(连续流模式)。
stop停止跟踪。
status获取跟踪状态。
Start 子命令语法:
start <outfile1> [outfile2] [poll_period [trace_size [stop_tmo]]]
outfile1保存 PRO CPU 数据的文件路径。此参数需要具有如下格式:
file://path/to/file。outfile2保存 APP CPU 数据的文件路径。此参数需要具有如下格式:
file://path/to/file。poll_period跟踪数据的轮询周期(单位:毫秒)。如果该值大于 0,则命令以非阻塞的模式运行。默认为 1 毫秒。
trace_size最多要收集的数据量(单位:字节)。当收到指定数量的数据后,将停止跟踪。默认值是 -1(禁用跟踪大小停止触发器)。
stop_tmo空闲超时(单位:秒)。如果指定的时间内没有数据,将停止跟踪。默认值是 -1(禁用跟踪超时停止触发器)。
备注
如果 poll_period 为 0,则在跟踪停止之前,OpenOCD 的 telnet 命令行将不可用。你需要复位板卡,或者在 OpenOCD 的窗口(非 telnet 会话窗口)输入 Ctrl+C 命令,手动停止跟踪。另一个办法是设置 trace_size,等到收集满指定数量的数据后自动停止跟踪。
命令使用示例:
esp sysview start file://pro-cpu.SVDat file://app-cpu.SVDat
跟踪数据被检索并以非阻塞的方式保存。要停止此过程,需要在 OpenOCD 的 telnet 会话窗口输入 esp sysview stop 命令,也可以在 OpenOCD 窗口中按下快捷键 Ctrl+C。
多核 SystemView 跟踪命令
对于支持多核跟踪的 SystemView 3.60 及更高版本,请使用 esp sysview_mcore 命令。此命令与 esp sysview 相同,但使用官方 SEGGER SystemView 多核格式。所有核心的跟踪数据都保存在同一文件中,可在 SEGGER SystemView v3.60 或更高版本中打开。
命令使用示例:
esp sysview_mcore start file://heap_log_mcore.SVDat
有关详细的命令语法和选项,请参考前文所述的 esp sysview 命令,因为 esp sysview_mcore 支持相同的参数。
数据可视化
收集到跟踪数据后,可以使用特殊的工具对结果进行可视化并分析程序行为。
关于如何安装、配置 Impulse 并使用它来可视化来自单个核心的跟踪数据,请参阅 官方教程。
备注
ESP-IDF 使用自己的 SystemView FreeRTOS 事件 ID 映射,因此用户需要将 $SYSVIEW_INSTALL_DIR/Description/SYSVIEW_FreeRTOS.txt 替换成 $IDF_PATH/tools/esp_app_trace/SYSVIEW_FreeRTOS.txt。在使用上述链接配置 SystemView 序列化程序时,也应该使用该特定文件的内容。
应用示例
system/sysview_tracing 演示如何使用 SEGGER SystemView 记录 FreeRTOS 任务与系统事件。
system/sysview_tracing_heap_log 演示如何在记录 SystemView 事件的同时,对堆内存分配进行跟踪。