ESP32 使用 OpenOCD + SystemView 工具分析 FreeRTOS 多线程操作之间的关系

Table of Contents

1、SystemView 工具概览

2、SEGGER 官网获取 SystemView 工具

3、安装 SystemView 工具

4、从 ESP32 上使用 SystemView 所需要的依赖

5、安装工具 OpenOCD

6、在 ESP32 的 menuconfig 中使能 SystemView 的配置选项

7、运行程序,使用 OpenOCD 获取 SystemView 能够读取的跟踪文件

①首先要启动 OpenOCD ,在添加了 PATH 的终端中 调用下面的命令

②再开一个终端 启动 telnet 服务 进行调试

③启动 ESP32 应用程序,记录运行状态

8、打开 SystemView 加载跟踪文件进行分析


 

最近在学习 ESP32 的时候,一直在想,如果能有一个可以分析不同优先级的多个线程任务之间的关系的方法就好了。所幸 EPS32 本身已经支持了这样的功能。配合来自 SEGGER 的 SystemView 工具,我们能够方便的了解多线程运行的时候,各个线程之间的切换情况。

使用一个SEGGER J-Link和实时传输技术(RTT),SystemView可以连续的记录数据,并实时的分析和展现这些数据。
SystemView可以分析中断、任务和软件定时器已经执行了多久,何时和它们使用了多长时间。它揭示了在某个命令中的发生了什么,哪个中断触发了任务切换,中断和任务调用了哪个底层RTOS的API函数。
可以执行周期精确的分析,甚至可以对用户功能进行计时。

今天我就来尝试使用这个方便的小工具。

好,那么下面这篇博客按准备走流程的方式组织。

 

1、SystemView 工具概览

SystemView 工具打开时候的样子如下图所示,它能够帮助我们分析系统中各个线程之间的关系。

ESP32 使用 OpenOCD + SystemView 工具分析 FreeRTOS 多线程操作之间的关系_第1张图片

下面是从 bjr2016 博主博客上摘抄下来的官网译文,它详细的介绍了什么是 SystemView :

SystemView 是一个用于虚拟分析嵌入式系统的工具包。SystemView 可以完整的深入观察一个应用程序的运行时行为,这远远超出一个调试器所能提供的。这在开发和处理具有多个线程和事件的复杂系统时尤其有效。

SystemView 由两个部分组成:

SystemView 的PC端程序,用于收集目标板上传的信息。

SystemView 嵌入式端程序可以分析嵌入式系统的行为。它记录嵌入式系统产生的监视数据,并在不同的窗口中显示这些信息。这些记录可以保存到文件中,用于以后的分析或者编写文档。
————————————————
版权声明:本文为CSDN博主「bjr2016」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bjr2016/article/details/78474097

 该博主「bjr2016」有详细的关于 SystemView 官网使用说明的译文,根据本文搭建好 ESP32 上的 SystemView 所需环境之后可以参考他的译文说明进行下一步分析的学习。【For English native language readers, you can just Visit the official website:https://www.segger.com/downloads/free-utilities/UM08027  】

 

2、SEGGER 官网获取 SystemView 工具

我们可以访问 SEGGER 的官网【 https://www.segger.com/products/development-tools/systemview/  】找到 SystemView 的下载链接,我们要选择对应的系统的安装包,我这里使用的是 Linux 版本的 x64 位系统的 deb 安装包,也可以选择使用 Windows 系统开发配合 Windows 对应的安装包。

ESP32 使用 OpenOCD + SystemView 工具分析 FreeRTOS 多线程操作之间的关系_第2张图片

 

3、安装 SystemView 工具

下载的 deb 安装包直接双击打开,点击 Install 就可以安装了。安装好之后可以在终端中输入 SystemView 启动程序。

ESP32 使用 OpenOCD + SystemView 工具分析 FreeRTOS 多线程操作之间的关系_第3张图片

4、从 ESP32 上使用 SystemView 所需要的依赖

IDF 具有生成与 SystemView 兼容的跟踪所需的所有代码,因此用户只需配置必要的项目选项(请参见上文),构建,下载映像到目标并使用 OpenOCD 收集数据即可。

这里需要说明的是,ESP32 开发板并不能使用 SystemView 自带的 Start Recording 来启动调试和录制,跟踪过程目前也不能使用该工具进行控制。需要配合 OpenOCD 来获取 SystemView 可以读取的文件,然后才能够使用该工具进行分析。所以在 ESP32 上使用 SystemView 还需要安装 OpenOCD 调试工具。

 

5、安装工具 OpenOCD

如果你使用 ESP-IDF v4.0 以上版本,可以使用 esp-idf 目录下 install.sh 进行安装,该安装会自动完成 OpenOCD 的安装过程!!!!!

在 Terminal 中输入 ./install.sh 就可以完成 OpenOCD 的安装 安装完成之后输入 . ./export.sh 就可以在添加相关的 PATH

machine:~/esp/esp-idf$ ./install.sh
machine:~/esp/esp-idf$ . ./export.sh

这里需要注意的是,在终端中输入 . ./export.sh 来添加 PATH 的方式只能在当前 Terminal 中有效。如果切换了终端需要在 esp-idf 路径下重新执行。这里建议使用 alias 对这条指令进行进行化名,方便在不同的终端中快速调用这个工具。比如在用户目录下的 .bashrc 文件中添加:

alias get-idf='. /home/you_name/esp/esp-idf/export.sh'

添加之后,只需在终端中调用 get-idf 就完成了 PATH 配置。

machine:~$ get-idf

 

旧版本的 IDF 可以参考我之前的博客安装 OpenOCD。【https://blog.csdn.net/gengyuchao/article/details/100125888】

 

6、在 ESP32 的 menuconfig 中使能 SystemView 的配置选项

 

通过 Component config > Application Level Tracing > FreeRTOS SystemView Tracing (CONFIG_SYSVIEW_ENABLE)  这个菜单配置选项来启用对此功能的支持。

官网原文:

Support for this feature is enabled by Component config > Application Level Tracing > FreeRTOS SystemView Tracing (CONFIG_SYSVIEW_ENABLE) menuconfig option.

 

7、运行程序,使用 OpenOCD 获取 SystemView 能够读取的跟踪文件

①首先要启动 OpenOCD ,在添加了 PATH 的终端中 调用下面的命令

openocd -f interface/ftdi/esp32_devkitj_v1.cfg -f board/esp-wroom-32.cfg

如果没有在系统中给 USB 口授权 OpenOCD 可能会启动失败。解决方法如下:

补充:openocd需要使用usb,需要把( idf 4.0 )  .espressif/tools/openocd-esp32/v0.10.0-esp32-20190708/openocd-esp32/share/openocd/contrib/60-openocd.rules  文件拷贝到 /etc/udev/rules.d ,这样openocd就有使用usb调试设备的权限了(配置完成后需要重启生效)

旧版本请参考我之前的博客【https://blog.csdn.net/gengyuchao/article/details/100125888】

启动的效果如下:

ESP32 使用 OpenOCD + SystemView 工具分析 FreeRTOS 多线程操作之间的关系_第4张图片

②再开一个终端 启动 telnet 服务 进行调试

telnet localhost 4444

 在这个终端下可以输入命令

esp32 sysview start file://pro-cpu.SVDat file://app-cpu.SVDat

就像这样,敲下回车之后就能在 用户目录下生成 pro-cpu.SVDat 和 app-cpu.SVDat 文件了,这两个文件分别记录了在 ESP32 上运行的两个 CPU 中的程序,在系统中中断、任务和软件定时器已经执行了多久,何时和它们使用了多长时间。这两个文件能够被 SystemView 软件直接加载打开。

使用界面如下:

ESP32 使用 OpenOCD + SystemView 工具分析 FreeRTOS 多线程操作之间的关系_第5张图片

其他可以使用的命令可以参考 espressif 官网,这里有详细的介绍:https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/app_trace.html#app-trace-system-behaviour-analysis-with-segger-systemview

③启动 ESP32 应用程序,记录运行状态

打开上面两个程序之后,我们就可以运行我们自己编写的 ESP32 程序了,OpenOCD 会如实的记录下我们程序的运行状态。

 

8、打开 SystemView 加载跟踪文件进行分析

当我们的程序结束后,我们就可以关掉程序和 OpenOCD 工具了,接下来可以直接使用 SystemView 工具打开我们之前的记录文件进行分析。

比如这样:

ESP32 使用 OpenOCD + SystemView 工具分析 FreeRTOS 多线程操作之间的关系_第6张图片

使用这个工具我们可以轻松的看到一个时间线,我们每个任务的运行流程、所占时间、任务切换情况都很明白的显示在上面。我们可以根据这些信息分析我们的任务是否按照自己的期望在运行。

至此 SystemView 的环境搭建就已经完成。

 

好啦,夜已深,今天的记录就到这里吧,希望能够对大家有所帮助。欢迎大家给我点赞关注、与我交流讨论呀。O(∩_∩)O哈哈~

你可能感兴趣的:(ESP,Linux,ESP32)