本文的目的和结构
本文的目的和背景
随着 MCU 的性能越来越强,嵌入式产品的功能越来越复杂,对于系统的调试和分析提出了新挑战,调试某个功能或问题通常需要花费大量精力,SystemView 是一款帮助用户进行系统调试和分析的强大工具,能够显著缩短开发和调试时间,提高开发效率。本文的目的在于帮助大家在 RT-Thread 上使用 SystemView 工具对系统进行调试和分析。
本文的结构
本文首先介绍 SystemView 工具是什么,然后介绍 RT-Thread 上的 SystemView 软件包,以及具体的使能、配置方法。之后以一个具体的 DEMO 介绍了 SystemView 分析工具的详细使用流程。最后放置了一个参数目录供大家配置时作为参考。
SystemView 是什么
SystemView 是一个可以在线调试嵌入式系统的工具,它可以分析有哪些中断、任务执行了,以及这些中断、任务执行的先后关系。还可以查看一些内核对象持有和释放的时间点,比如信号量、互斥量、事件、消息队列等。这在开发和处理具有多个线程和事件的复杂系统时尤其有效。
SystemView 由两个部分组成:
PC端程序,收集并展示来自嵌入端传来的数据,也可以将这些数据保存到本地供以后分析。
嵌入式端程序,收集嵌入式系统的运行数据,并将它们通过 J-Link 的 RTT 模块传输给 PC 端
因 SystemView 的数据传输利用了 J-Link 的 RTT 技术,所以只有用 J-Link 连接开发板的时候才能使用 SystemView
RT-Thread 上的 SystemView 软件包
介绍
RT-Thread 上的 SystemView 软件包是 SystemView 工具的嵌入式端程序实现,主要功能有:配置 SYSTEMVIEW 和 RTT 的具体参数,收集和格式化监视数据,将数据通过 J-Link 发送给 PC 端等。只需要利用 RT-Thread 推出的env 工具使能 SystemView 软件包,并对其进行简单的配置,就能完成 SystemView 的嵌入式端程序的配置。
如何使能,配置选项
以正点原子 RT1052 开发板为例
步骤一:在 env 工具中进入 menuconfig 图形化配置工具
打开 env 工具,使用命令 cd D:\rt-thread\bsp\imxrt1052-evk
切换到 RT-Thread 源码 bsp 根目录下的 imxrt1052-evk 目录,然后输入命令 menuconfig
配置工程。
menuconfig 是一种图形化配置工具,RT-Thread 使用其对整个系统进行配置、裁剪。
步骤二:使能 SystemView 软件包。
利用上下键选中 RT-Thread online packages,按回车键进入下级菜单,然后在 tools packages 中打开 SystemView。
步骤三:具体的配置。
按回车键进入下级菜单,进行具体的配置(输入 ?可以显示选项的具体信息)。
下面介绍两个常用的选项,其他的选项可以根据需要自己进行配置(参考最后一部分参数目录):
将下图红框圈住的选项,更改为自己开发板对应的内核,如 I.MX-RT1052 对应 M7 内核
进入 SystemView buffer configuration 下级菜单,关闭事后分析模式
开启事后分析模式之后,需要在工程里调用函数 SEGGER_SYSVIEW_Start() 启动录制。系统事件会被不断的记录下来,并在缓冲区满时覆盖旧的事件。所以当读取缓冲区时,只能读取到最新的事件。
当系统运行了很长时间并突然崩溃时,事后分析可能会很有用。在这种情况下,可以从目标中的缓冲区中读取最新的事件,SystemView 可以显示系统崩溃之前发生的情况。
关闭事后分析模式之后,就处于连续记录模式,可以在 PC 端控制录制的开始和结束,连续记录系统的运行。要分析下面的 demo 的运行,需要开启连续记录模式。
配置好选项之后,按 ESC 返回,退出并保存配置,这样 SystemView 软件包的使能和相关配置就完成了。
SystemView 工具的使用
我们以一个具体的 demo 来讲解 SystemView 工具的使用
demo 代码的添加
在文件 main.c 中添加以下代码,然后在 main 函数中调用 demo 初始化函数 demo_init();
运行 demo。
SystemView PC 端程序的配置及使用
步骤一:下载 SystemView 分析工具 下载链接
步骤二:为 RT-Thread 添加系统描述文件
首先找到开发板目录下的 packages 目录,然后在 packages 目录下找到 segger_debug-xxx 目录,在这个目录里面有一个 SystemView_Description 文件夹,RT-Thread 系统的描述文件就在里面,具体的目录结构如下所示:
bsp\你自己的开发板\packages\segger_debug-xxx\SystemView_Description\SYSVIEW_RT-Thread.txt`
将这个文件复制到 SystemView 工具安装目录下的 Description 目录下,这样 SystemView 就可以识别出 RT-Thread 系统了。
步骤三:配置设备信息,开始录制
双击打开 SystemView PC端程序,下面是主界面上一些常用按钮的功能介绍。
当处于连续记录模式时,点击开始录制按钮,会弹出一个配置设备信息的窗口。
图中 RTT 控制块的地址已经通过串口打印出来了,只要打开终端软件将打印出来的地址复制到上方即可。
点击 OK ,现在 SystemView 就开始实时录制系统信息了,下面是系统实时的运行情况。
步骤四:结束录制,分析系统
点击结束录制按钮,结束录制。将鼠标放置到时间轴窗口里,利用滚轮将事件放大到适合分析的大小
利用 SystemView 工具我们可以看出来,系统的运行确实如我们设想的那样,线程1先开始运行,然后在释放信号量之后被线程2抢断。然后线程2运行,之后因获取不到信号量被挂起,线程1继续运行。从上面的事件列表还可以看到每个线程获取或释放信号量的具体时间。
如果开启了事后分析模式,就不能点击开始录制按钮了,而是要点击读记录数据的按钮,其他的的操作和实时分析模式一样。
看完这篇文档,相信你已经学会如何使用 RT-Thread 上 的 SystemView 分析工具了。
原作者:RT-Thread应用笔记