HPM_SDK支持Trace Recorder

引言

HPM_SDK从V1.8.0开始,增加了对Trace Recorder的支持。Trace Recorder是运行在嵌入式处理器上的跟踪系统执行调度的软件,通过通信接口将系统的运行调度信息发送到PC端的上位机软件做分析。借助上位机软件中优秀的图形显示和分析功能,可以获得可视化的跟踪调试功能,加速产品的开发。

主要功能

HPM_SDK目前支持了以下功能

  • FreeRTOS跟踪
    • JLink流模式
    • 快照模式
  • RT Thread跟踪
    • JLink流模式

HPM_SDK提供了以下例程供开发者参考

  • samples\trace_recorder\freertos
  • samples\trace_recorder\rtthread-nano

使用说明

HPM_SDK配置

HPM_SDK中相关的CMakeLists选项功能如下:

  • CONFIG_TRACE_RECORDER:配置为非空值,使能Trace Recorder功能,为功能总开关选项
  • CONFIG_TRACE_RECORDER_SNAPSHOT_MODE:配置成非空值,使能Trace Recorder快照模式,目前仅支持FreeRTOS
  • CONFIG_TRACE_RECORDER_STREAM_MODE:配置成"JLink RTT",使能Trace Recorder流模式,使用JLink RTT接口通信

配置好CMakeList选项后,需要在源代码中做以下几步:

  • FreeRTOS
    • FreeRTOSConfig.h文件的末尾的#endif前,增加#include "trcRecorder.h"
      #if (configHSP_ENABLE == 1 && configRECORD_STACK_HIGH_ADDRESS != 1)
      #define configRECORD_STACK_HIGH_ADDRESS        1
      #endif
      #include "trcRecorder.h"
      #endif /* FREERTOS_CONFIG_H */
    • main函数所在文件中添加#include "trcRecorder.h"
      #include "FreeRTOS.h"
      #include "task.h"
      #include "trcRecorder.h"
    • main函数初始化代码中添加xTraceInitialize();xTraceEnable(TRC_START);
      ...
      xTraceInitialize();
      xTraceEnable(TRC_START);
      ...
      while(1);
  • RT Thread
    • rt_hw_board_init函数所在文件中添加#include "trcRecorder.h"
      #include 
      #include 
      #include "trcRecorder.h"
    • rt_hw_board_init函数中添加xTraceInitialize();xTraceEnable(TRC_START);
      xTraceInitialize();
      xTraceEnable(TRC_START);
      board_init();
      rtt_base_init();

上位机软件

推荐使用Percepio Tracealyzer4作为上位机配合Trace Recorder进行系统跟踪。注:商业应用请向Percepio公司申请商业许可

更新Tracealyzer4的JLink设备支持列表

如果在Tracealyzer4的JLink设备支持列表中找不到相应的HPMicro的SOC,那么可能是因为Tracealyzer4中的JLink_x64.dll版本较低。从Segger官网下载最新的JLink软件,并将其中的JLink_x64.dll复制覆盖掉C:\Program Files\Percepio\Tracealyzer 4中的同名文件即可。
JLink软件下载地址:https://www.segger.cn/downloads/jlink/
JLink软件升级指南:https://kb.segger.com/J-Link_DLL_Updater

JLink RTT模式跟踪

获取JLink RTT控制块地址

打开编译生成的.map文件,搜索_SEGGER_RTT变量,即可获取其地址
gcc的map文件:

segger的map文件:

上位机软件配置

打开tracealyzer4软件,打开stream mode,切换到JLink接口,并在JLink配置中选择目标芯片

配置RTT控制块地址,以及RTT的通道序列号(默认为1)

在控制界面中,开启数据抓取: 依次点击Reset, Halt, Reconnect, Start Session。

然后我们应该就可以看到具体的跟踪数据了。

快照模式

快照模式需要大量的内存存储跟踪的数据,所以在一些内存较小的配置下,此模式可能不被支持,例如当构建方式为ram和flash_xip时。
快照模式下,TraceRecorder将数据存储在内存中,需要将数据导出,然后使用上位机工具进行分析。

获取数据存储的地址
  • 打开编译生成的.map文件,搜索RecorderData,即可看到其地址和大小
导出快照数据
使用GDB

首先打开GDB Server(openocd/JLink GDB Sever),使用GDB连接目标,并暂停程序的执行

tar remo :2331
mo halt
dump binary memory target_data.bin {start address of RecorderData} {end address of RecorderData}

然后打开tracealyzer4软件,打开target_data.bin文件即可

使用JLink

打开tracealyzer4软件,打开snapshot模式,切换到JLink接口,并在JLink配置中选择目标芯片

在内存配置中配置RecorderData的首地址和大小

暂停目标程序执行,然后读取数据。

除了tracealyzer4软件外,我们还可以将其采集到的psf数据转换为ctf(common trace format),并借由其他跟踪分析软件进行分析。下面推荐一个用于转换格式的开源工程。
https://github.com/jonlamb-gh/trace-recorder-to-ctf
利用这个开源工程,我们可以使用Trace Compass和babeltrace2等分析工具。

0
0
发表回复 0

Your email address will not be published. Required fields are marked *