SystemView 介绍与移植

SystemView 介绍与移植

version : v1.0 「2022.7.20」 第一版

author: Y.Z.T.

version : v2.0 「2022.7.21」 添加部分漏掉的内容[详见](# 3.1 补充)

author: Y.Z.T.

摘要: 介绍systemview,以及移植过程

简介: 前几天在看RM官方代码(RoboRTS-Firmware-icra2021)时,看到其中对SystemView的应用,稍微花了点时间研究了一下,感觉挺有用的,记录一下

前言

在使用FreeRTOS进行应用开发时经常会遇到普通的方式难以调试的问题,如栈内存不足等等,同时也希望对运行的多个Task进行实时的

性能及资源占用的分析,通常的调试手段在这里就变的心有余而力不足了。以FreeRTOS为例,如何在长时间的运行过程中收集调试数据

进行分析,以及如何调试不同的组件(如Queue,Notification,Semaphore等等)?这个时候就需要Trace工具帮忙了。针对RTOS的

Trace需求,接下来将针对SEGGER开发的SystemView Trace工具进行介绍。


什么是SystemView?

SystemView是SEGGER开发的针对嵌入式系统的trace工具,支持多种RTOS,也支持自定义OS的移植(需实现trace API,参见User

Manual)。其核心基于SEGGER RTT,一个Host-Target间的通信框架,可通过多种方式连接,除J-LINK之外还可以使用串口及TCP-IP协

议,对非商业用途免费且无功能限制。

SystemView 是一个用于虚拟分析嵌入式系统的工具包。SystemView 可以完整的深入观察一个应用程序的运行时行为,这远远超出一个

调试器所能提供的。这在开发和处理具有多个线程和事件的复杂系统时尤其有效。

官方介绍

SystemView的原理简单来讲是这样的:首先上位机PC端有一个处理程序,下位机ARM上需增加部分代码,用于记录嵌入式系统的一些数

据,通过连接的仿真器接口将数据传输到上位机,然后PC端的处理程序处理这些数据,由于数据传输使用的是SEGGER J-link的实时传输

技术(RTT),所以SystemView可以实时分析和展示数据。分析的内容包括中断、任务、软件定时器执行的时间,切换的时间,以及发

生的事件等,这些分析都是实时的,丝毫不影响下位机的运行。这样就可以验证我们设计的整个嵌入式系统是否按照我们的预期在工作,

比如任务的切换逻辑中断的触发等。它可以应用于带有RTOS的系统,也支持裸机,对于下位机资源的消耗量也是比较少的。



测试环境

开发板: ACE实验室H7通用开发板 // ACE实验室哨兵H7云台板

主控芯片: STM32H750VBT6

CPU: Cortex-M7

最高主频: 480MHZ

测试程序: [2022_sentryH750_v1.3.5] / [systemview_test]

FreeRTOS版本: v10.3.1

FreeRTOS说明: FreeRTOS为STM32CubeMX配置的未修改版本。

开发平台: VSCODE、MDK-ARM

程序编辑: VSCODE

程序调试: MDK-ARM [ v 5.35.0.2]

调试设备: J-Link仿真器 : [ACE - Sentry-哨兵] / [Sentry]

Systemview 程序包: SystemView_Windows_V332_x86

下载链接



移植过程

PC端程序包下载:

在官网上下载Systemview程序包

在这里插入图片描述

window端的程序有两种

安装包

官网下载最新的DEB包或者RPM包并执行。安装向导会指引完成安装。

可移植压缩包

官网下载最新的存档,解压到系统的任意目录。
这种方式不需要安装,解压后就可以直接使用程序包内容。


代码移植

将程序包内SEGGER 目录下代码以及 Sample 中的FreeRTOS代码添加到项目中。

1. 首先是Config文件夹下面的所有文件。

在这里插入图片描述

2. 根据自己的RTOS版本选择系统配置文件(我的是 FreeRTOS v10.3.1 选择用 FreeRTOSV10)

在这里插入图片描述

3. RTT相关文件

在这里插入图片描述

4. 放进项目里面的systemview文件夹

在这里插入图片描述

5. 程序添加
  1. FreeRTOS.h 中添加 #include "SEGGER_SYSVIEW_FreeRTOS.h"
SEGGER_SYSVIEW_Conf();

在这里插入图片描述

  1. main.c里面添加#include "SEGGER_SYSVIEW.h"
#include "SEGGER_SYSVIEW.h"

在这里插入图片描述

  1. 然后还需要在系统启动前添加segger systemview的初始化
	/*  systemview 初始化 */
    SEGGER_SYSVIEW_Conf();

在这里插入图片描述

3.1 补充

还要在系统启动前启动DWT计数器

在这里插入图片描述

[默认情况下SystemView会从DWT的Cycle counter获取系统当前周期数用于生成时间戳 ; 但在STM32CubeMX的初始化代码中该计数器默认未启用,在这里手工启用。 详见(stm32延时方式 dwt.pdf)]

  1. FreeRTOSConfig.h中添加宏定义
#define INCLUDE_xTaskGetIdleTaskHandle  1
#define INCLUDE_pxTaskGetStackStart     1

在这里插入图片描述

  1. 取消勾选keil的GNU勾选模式

[不然会报错]

在这里插入图片描述

环境问题(未解决)

[ps: 取消之后目前已知问题,会导致print 重定义出问题]

在这里插入图片描述

暂时是注释解决

到这里就完成了在STM32上的程序移植


使用过程

1. 启动SystemView

在这里插入图片描述

2. 可能会弹出警告,说没有商业许可;不管他,暂时没发现问题

在这里插入图片描述

3. SystemView将加载并分析这些数据,展示加载的记录的系统信息

在这里插入图片描述

4. 点击开始记录

在这里插入图片描述

5. 选择JLink

在这里插入图片描述

6.选择目标板的信息(这里我的以及搞过了,没弹出来,用的网图)

在这里插入图片描述

7.进入实时监视

部分JLINK会因为被检测到盗版而无法使用

在这里插入图片描述

窗口介绍

总共分大概以下几种窗口:

时间轴窗口(Timeline)事件窗口(Events)终端窗口(Terminal)CPU占用窗口(CPU Load)不知道怎么命名窗口(context)

在这里插入图片描述


时间轴窗口(Timeline)

在这里插入图片描述

用于显示各任务占用的时间和逻辑顺序

  • 处于ready状态的任务,在开始执行前会被显示在浅灰色的栏中。
  • 上下文是按优先级排序的。第一行显示了一个统一上下文中的所有活动。列表的顶部是中断,用Id来排序的,接下来是scheduler调度器和软件定时器(如果在系统中使用这些的话)。
  • 在调度器(和定时器)下面,任务按优先级排序。当没有其他上下文处于活动状态时,底层上下文显示空闲时间。

事件窗口(Events)

在这里插入图片描述

Events窗口显示系统发送的所有事件,并显示它们的信息。每个事件都有以下几项:

  • 在目标时间或记录时间内的时间戳,可以用微秒或纳秒分辨率显示
  • 创建Events的上下文,即运行的任务。
  • Event描述,和事件类型一起显示,(IRS进入和退出,任务活动,API调用)。
  • Event细节描述事件的参数,即API调用参数。
  • 在列表中定位事件的ID。

也可以通过事件滤波器查看对应的事件

在这里插入图片描述


终端窗口

在这里插入图片描述

终端窗口显示来自目标应用程序的printf输出,以及发出log输出的任务上下文,以及发送消息时的时间

戳。双击消息,可以显示出该消息在事件列表中的所有信息。

Timeline窗口显示的是输出的指示器,根据级别排序(错误总是排在顶部)。显示的日志级别可以通过

View -> Message Indicators… 来配置。

可通过systemview的API接口,打印信息

在这里插入图片描述


CPU占用窗口(CPU Load)

在这里插入图片描述

CPU load窗口显示了一个周期内上下文占用的CPU时间。CPU负载是用一个使用Timeline当前分辨率的

bin的宽度来测量的,因此与缩放级别是同步的。

可以通过选择bin的数量用来测量较短或较长时期的负载。使用一个bin,就可以在整个可见的时间轴上

测量CPU负载。


Context窗口

在这里插入图片描述

Context窗口信息包括以下内容:

  • 上下文名称和类型。
  • 任务堆栈信息。(如果有的话)
  • 上下文的活动计数。
  • 活动频率。
  • 总的运行时间和最后运行时间。
  • 每秒当前的、最小和最大运行时间,单位是ms和%。

其他使用

事件记录

systemview默认的事件有

在这里插入图片描述


添加中断记录

可以自己在中断函数中添加对应的API接口,来实现对中断进入的记录。

在这里插入图片描述

结果如图:

在这里插入图片描述

可以看到会定期触发can中断,且每次进入中断事件长短不同

在这里插入图片描述

分析示例

在这里插入图片描述

可以看到哨兵云台任务占用的时间最长,且可以看到我们现在的任务运行时间在整个周期中占用的都是非常短的。

存在的问题

问题描述: J-Link不同而导致被识别盗版而不能用的问题

  • 原因: J-Link被识别盗版
  • 解决: 换用其他的J-Link仿真器,或利用串口进行收发(详见链接串口移植收发

问题描述: 出现报错:

Error: L6218E: Undefined symbol SEGGER_SYSVIEW_X_GetInterruptId (referred from segger_sysview.o).
Error: L6218E: Undefined symbol SEGGER_SYSVIEW_X_GetTimestamp (referred from segger_sysview.o).

  • 原因: systemview 在keil中与gnu扩展的不兼容
  • 解决: 在keil中选择不勾选GNU拓展([详见]( ######5. 程序添加))
  • 隐患: 其他部分代码可能会出现问题

拓展问题表述: 串口 print重定义代码出现报错

  • 原因: 因为没有了GNU拓展,导致这部分代码不可用

  • 解决: 暂定先注释掉,待解决。

应用场景

  • 用于查看每个进程的时间片,查看各个进程时间占用情况。
  • 防止某个进程占用时间过长,而被操作系统强行进入堵塞状态。
  • 查看中断进入情况,避免因传感器发送频率过高,而频繁进入中断。
结合EDA工具—动态仿真软件SystemView介绍数字通信系统的仿真和分析方法以及数字通信系统设计和开发的新手段,并力求通过实例使读者掌握和精通System View动态仿真软件。 本书内容分为5章,分别介绍SystemView动态仿真软件的基本使用方法、主要功能及其开放式的设计环境;数字滤波器和位真DSP的仿真设计方法以及FPGA/DSP设计工具的接口;数字载波通信系统各种常用调制和解调方式的基本原理及其仿真分桥方法;直序扩频通信基本原理及几个实际系统的仿真分析举例;结合SystemView专业扩展库,IS-95的窄带CDMA系统、EN 300 744的DVB系统和3GPP的WCDMA系统的简介及其链路级仿真。 本书可作为基于SystemView的通信原理实验课程的教材,亦可作为现代通信系统仿真专业设计人员的参考书,另也可供欲学习精通SystemView动态仿真工具的爱好者使用。 目录回到顶部↑第1章 SystemView仿真平台的功能使用简介 1.1 SystemView简介 1.2 设计窗口 1.2.1 设计窗口简介 1.2.2 图标库及图标定义的方法 1,2.3 设计窗口的基本使用 1.2.4 设计窗口中的各项功能 1.3 分析窗口 1.3.1 分析窗口简介 1.3.2 接收计算器 第2章 利用SystemView仿真滤波器位真DSP 2.1 数字滤波器及设计方法概述 2.1.1 IIR滤波器设计 2.1.2 FIR滤波器设计 2.2 利用仿真软件SystemView设计各种滤波器 2.2.1 FIR滤波器设计 2.2.2 模拟滤波器设计 2.2.3 通信滤波器设计 2.2.4 用户自定义型滤波器设计 2.2.5 直接输入系数滤波器设计 . 2.2.6 滤波器及其它DSP设计的FPGA实现 2.3 SystemView的位真DSP设计功能 2.3.1 预备知识 2.3.2 DSP处理器简介 2.3.3 SystemView的DSP库简介 2.3.4 利用DSP库仿真GSM系统基带信号及其FPGA实现 2.3.5 SystemView的RTDA功能 第3章 数字载波通信基本原理及其在SystemView上的仿真 3.1 数字通信系统的基本概念 3.1.1 数字通信系统的组成 3.1. 2 数字通信系统的主要性能指标 3.2 数字载波通信系统的几种调制方式 3.2. l 二进制幅移键控 3.2. 2 二进制频移键控 3.2. 3 二进制相移键控 3.2.4 二进制差分相移键控 3.2.5 多进制幅度键控 3.2.6 多进制相移键控 3.2.7 正交幅度调制 3.2.8 偏移四相相移键控 3.2.9 最小频移键控 3.2.10 高斯最小频移键控 3.3 QPSK系统原理仿真实例 3.3.1 QPSK调制解调原理仿真 3.3.2 QPSK信号载波提取及实际采样数据相干解调仿真 3.4 误码率的计算 第4章 直序扩频通信基本原理及其在SystemView上的仿真 4.1 扩频通信的基本原理 4.1.1 扩频通信的基本原理 4.1.2 直序扩频通信系统简介 4.2 基于IEEE802.11的无线局域网直序扩频系统在SystemView上的仿真 4.2.1 WLAN系统简介 4.2.2 WLAN系统在SystemView上的仿真 4.2.3 调制器和发射机子系统 4.2.4 射频到中频变换子系统 4.2.5 解扩子系统 4.2.6 信息解调子系统 4.3 MSK直序扩频相关解调系统在SystemView上的仿真 4.3.1 MSK直序扩频系统简介 4.3.2 扩频调制及MSK调制 4.3.3 解调解扩仿真及实验波形对比 4.4 MSK直序扩频系统延时相干解调方法在SystemView上的仿真 4.4.1 差分编码MSK直序扩频延时相干解调系统的数学模型 4.4.2 差分编码MSK直序扩频延时相干解调系统在SystemView上的仿真 4.4.3 对仿真结果的分析 4.4.4 解调解扩系统硬件实验 4.5 PSK直序扩频信号数字相关解调方案在SystemView上的仿真 4.5.1 PSK直序扩频信号数字相关解调方案简介 4.5.2 在SystemView上仿真 4.5.3 数字相关器子系统 4.5.4 仿真结果分析 第5章 CDMADVD和WCDMA通信系统简介及其在SystemView上的链路级仿真 5.1 码分多址CDMA系统概述 5.1.1 CDMA蜂窝通信系统的基本原理及特点 5.1.2 CDMA系统的关键技术 5.1.3 Q—CDMA数字蜂窝移动通信系统概述 5.2 码分多址CDMA系统在SystemView上的仿真 5.2.1 在SystemView平台仿真Q—CDMA下行链路基带系统 5.2.2 用SystemView仿真IS—95标准下CDMA系统上行链路接入信道 5.2.3 用SystemView仿真下行链路业务信道 5.3 数字视频广播系统基准系统概述 5.3.1 系统设计的综合考虑 5.3.2 信道编码和调制方式 5.4 DVB系统在SystemView上的仿真 5.4.1 在SystemView平台上仿真端对端DVB系统 5.4.2 在SystemView平台上仿真DVB调制器解调器 5.5 第三代移动通信技术及WCDMA通信系统概述 5.5.1 第三代移动通信系统概述 5.5.2 WCDMA通信系统概述 5.6 WCDMA系统在SystemView上的仿真 5.6.1 SystemView专业扩展库3GPP:FDD简介 5.6.2 64 kb/s电路交换承载业务DTCH上行链路编码过程仿真 5.6.3 基带频分双工宽带CDMA上行链路仿真 5.6.4 导频符号相干检测过程的仿真 附录A SystemView的安装 附录B SystemView菜单栏和工具栏简介 B.1 设计窗口菜单栏 B.2 分析窗口菜单栏 B.3 设计窗口工具栏 B.4 分析窗口工具栏 附录C SystemView图标说明 C.1 基本库 C.2 专业库 C.3 扩展库 附录D SystemView评估版软件使用指南 参考文献
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值