章节2 开始使用SystemView - Segger SystemView使用手册(译文)

2023-10-27

本文博客链接:http://blog.csdn.net/bjr2016,作者:bjr2016,未经允许不得转载.

2 开始使用SystemView


这一节描述如何开始使用SEGGER SystemView。解释了如何分析基于监视数据分析一个应用程序。

本章节参考的示例数据文件是 OS_IP_WebServer.SVDat。这个文件包含在SEGGER SystemView程序包中。

该示例数据文件展示了运行了embOS实时系统,embOS/IP TCP/IP协议栈和一个web服务器应用程序的目标系统的行为。

我们将使用SEGGER SystemView获取到的信息来分析应用程序正在做的事。

2.1 启动SystemView并加载数据

SystemView能够在线监控目标应用程序数据。这些监控数据能够保存成一个文件,用于后续工作。并且保存下来的数据能够在没有J-Link,甚至没有目标硬件或者目标应用程序的情况下进行分析。因此允许没有物理访问权的开发人员对系统进行分析。

  • 从开始菜单或者安装目录启动SystemView程序(SystemView.exe)
  • 在第一次启动SystemView时,它会提示打开示例记录。点击 Yes
  • 在启动后,选择 File->Sample Recordings -> /Sample/OS_IP_WebServer.SVdat。

SystemView将加载并分析这些数据,展示加载的记录的系统信息,你会看到下图所示:
这里写图片描述
加载了数据文件之后的SystemView

2.2 首先看一下这个系统

我们将首先看一下这些数据,得到关于监控系统的一些信息。

系统信息

在加载数据后显示的系统信息对话框提供了对记录的第一个概述。它显示有关目标系统的信息、任务的记录和统计信息、中断和事件。系统信息由应用程序发送,因此SystemView不需要任何额外的配置来分析和显示系统行为。
这里写图片描述
 SystemView时间线

时间轴(Timeline)
时间轴窗口显示完整的监控数据。在Events列表中,滚动到第一项开始。

时间轴窗口通过系统时间将系统活动可视化(任务、中断、调度器和空闲)。每行引用一个上下文项,我们可以看到在被监视的应用程序中使用的所有项

在开始时,我们可以看到有两个任务: IP_Task和IP_WebServer,用亮色的背景颜色标注。

放大的时间轴宽度到2.0ms,并双击’+1000us’下面的垂直线到中间并选择该项。(使用鼠标滚轮,工具栏项,[Ctrl]+[+]/[-]键,或View->Zoom In,View->Zoom Out来缩放)。

SysTick每毫秒中断都有一些系统活动。

将鼠标移动到背景名称上,以获得有关context类型的更多信息和运行时间信息。

单击IP_Task背景的右箭头按钮,跳转到下一个执行。放大或缩小显示活动的细节。

我们可以看到SysTick中断返回到OS调度器,这使得IP_Task已经就绪,由IP_Task的行中的灰色条表示,并让它运行。IP_Task从embOS API函数os_waiteventTimed中返回,返回值0,表示在当前的时间点没有事件发生。

IP_Task调用了另外三个具有快速返回和os_waiteventTimed的embOS API函数,它激活了调度器,使任务失效,并使系统处于空闲状态(idle)。当事件(EventMask = 1)发生时,或者10ms超时之后,IP_Task将再次激活。

记录的函数调用在时间轴上是显示为背景栏中的小条。垂直峰值线表示函数的调用,这些小条背景显示调用的长度。堆叠栏图形展示了嵌套函数调用。

结论

我们已经得到一些关于监测系统的第一手资料。从时间轴我们知道应用程序使用了哪些任务和中断,它由1 kHz SysTick中断控制,同时IP_Task至少每10 ms激活一次。

2.3 分析系统活动

在得到一些系统信息之后,我们将分析系统是如何被激活的。

这里写图片描述
系统事件列表

事件列表

事件(Events)列表显示了从系统发送的所有事件,并显示它们的信息,包括事件的时间戳、活动上下文、事件类型和事件细节。它与时间轴同步。

我们已经知道Systick每毫秒进出一次中断,并且每10ms超时发生时激活 IP_Task任务。

通过 View->Go to Event… (快捷键为:Ctrl+G)我们转到67#事件,在00.016 052 607时间点,调用了 OS_WaitEventTimed,超时参数设置为10ms,也就是在00.026 052 607时间点这个函数会超时退出。

可以通过View -> Events -> Toggle Reference 、 右键 ->Toggle Reference或者快捷键R 为事件设定一个参考时间点,之后的事件列表中的所有时间戳都将以最新的参考时间点作为0时间点。

现在看看IP_Task运行的是由于超时引起的还是由于等待的事件有效引起的,使用Go->Forward(快捷键F)我们切换到IP_Task的下一个活动。

此时的时间点事00.003 467 857,相对于参考时间点只过去了3ms,并未达到10ms的超时。所以任务是由于等待的事件变为有效而运行的。

我们可以看到之前发生的ETH_Rx中断,我们通过以太网(在接口0上的60字节)。因此ETH_Rx中断标记了这个事件,正如时间轴上显示的那样。然后ETH_Rx中断返回到调度器(Scheduler)。IP_Task任务运行,并从OS_WaitEventTimed函数返回,返回值为0b1,表示事件发生而不是超时。

结论

通过深入跟踪事件,我们可以看到IP_Task有2种情况会被激活运行:一是10ms发生超时,二是我们收到数据包并且产生了ETH_Rx中断。

2.4 进一步分析应用程序核心

我们现在知道系统主要受ETH_Rx中断控制,下一步是去看看当它被激活时,系统还干了什么。
这里写图片描述
*SystemView 应用程序分析

时间轴(Timeline),事件列表(Events list),终端和上下文窗口

SystemView的各窗口是同步的,并且一起使用时,提供了最佳的分析策略。

应用程序创建了一个web服务器,可以通过浏览器访问embOS/IP示例web页面。在web服务器运行和浏览器多次加载web页面时已经收集了示例数据。

log输出、时间戳和活动上下文均通过SystemView发送,并显示在终端窗口中。

在终端窗口中选择一个消息,会同步在事件窗口和时间轴上同步选择。时间轴指示了所有的终端数据数据。

通过这些消息,我们可以查看以太网连接是什么时间建立的,并选择浏览器在加载根页面的时候发出的“WEBS: Get /”。

在#12894号事件前面右击,查看更详细的分析。

这里我们看到发生了ETH_Rx中断,其在中断调用了embOS/IP函数 ReadPacketsSingleIF,并接收数据包。在标记了收到正如之前所看到的那个embOS事件后,退出中断到调度器,然后激活IP_Task任务。

IP_Task任务置位了表明IP_WebServer任务准备好的事件。另外的数据包立即被收到,并由IP_Task任务处理。当IP_WebServer开始运行时,会在accept()函数中调用一些系统函数然后返回。然后它检查Webserver子任务是否存在,如果不存在则创建它。

在创建任务时,任务会被添加到上下文,并且当它没有被激活时会在时间轴上标记为一个亮色背景。

IP_WebServer 在accept()函数中等待另外一个连接到来,WebServer处理接收到的http请求,并为web页面服务。当WebServer被激活,可能被ETH_Rx中断打断,而这个中断可能会导致一个任务切换到更高优先级的IP_Task任务。

注意:任务在事件轴上按优先级排序,在上下文窗口中可以看到精确的任务优先级。

2.4.1 分析结论

我们在对应用程序代码不了解的情况下分析了系统具体做了哪些事情。通过应用程序源代码,我们可以使用SEGGER SystemView检查系统所做的事是否和期望的一致。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

章节2 开始使用SystemView - Segger SystemView使用手册(译文) 的相关文章

  • 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

    前言 使用Pycharm创建新环境后 可能会使用pip安装一下包 但是会出现如下或类似如下报错 因为刚开始报错是显示ModuleNotFoundError No module named requests 所以就用pip instal re
  • Go Web编程实战(7)----并发goroutine

    目录 什么是goroutine 使用方式 什么是goroutine 在Go语言中 每一个并发执行的活动被称为goroutine 使用go关键字可以创建goroutine 其完整定义如下 go func name 其中 go是关键字 需要放在
  • junit5 mock静态方法 Mockito.mockStatic()

    junit5 mock静态方法 环境 jdk11 junit5 springboot pom
  • 记一次ubuntu无法显示图形化界面解决方法

    系统 16 04 因为未知问题 我的双系统ubuntu进入之后就只剩下了桌面 包括上方条形菜单栏和左侧图标都显示不出来了 并且ctrl alt T无法呼出终端 刚开始判断是系统的desktop出现了问题 重装了desktop和unity之后
  • linux重启ipv6_Linux关闭、开启、配置IPv6

    确认IPV6是否开启 如果出现含有以下粗体显示的部分 代表您的机器上IPV6已经开启 1 使用ifconfig查看自己的IP地址是否含有IPv6地址 inet6 addr fe80 213 d4ff fe05 b2ed 64 Scope L
  • 存储引擎

    什么是存储引擎 数据库相当于文件夹 表相当于文件 文件有多种不同类型 那么表也应该有不同类型 这句话说得真是太完美了 为什么乔碧萝还不来找我 表类型又称为存储引擎 存储引擎也称为表类型 Oracle和SQL server 等数据库只有一种存
  • 通过分析三篇物联网论文的分析与总结

    Title Abstract The importance of the IoT security research domain lies in its critical role in addressing the security c
  • java 后台 小程序微信支付

    java 后台 小程序微信支付 步骤说明 微信公众平台支付接口调试工具 1 生成字符串 appid appId body 测试商品名称 mch id 商户号 nonce str bf0d5ffe64fc44a3b0c101ead5a6a56
  • ElasticSearch 通用化批量存储封装设计

    ElasticSearch 通用化批量存储封装设计 一 设计需要满足的功能场景 二 约定 三 功能封装 1 枚举 2 定义接口 3 功能实现 一 设计需要满足的功能场景 为了满足在工作中 不用频繁的去写繁琐的 ES 存储的代码 一切都是为了
  • 页面正在加载中 ...

    lt script language JavaScript type text javascript gt var t id setInterval animate 30 var pos 0 var dir 2 var len 0 func
  • (正则)校验 8-16位,必须含有特殊字符、而大写字母、小写字母、数字至少包含其中两项

    function passwordValid str var rule lw a z uw A Z nw 0 9 sw lt gt function reg str patter var reg new RegExp patter if r
  • eclipse:the selection cannot be run on any server解决办法

    我导入一个项目 tomcat是7 0版本的 我的eclipse用的是8 5版本的 改了jar包后还是发现会出现如此错误 the selection cannot be run on any server 后来我就找到我的eclipse项目工
  • SVN分支

    Branch 选项会给开发者创建出另外一条线路 当有人希望开发进程分开成两条不同的线路时 这个选项会非常有用 比如项目 demo 下有两个小组 svn 下有一个 trunk 版 由于客户需求突然变化 导致项目需要做较大改动 此时项目组决定由
  • 【秋招必备】JVM性能调优面试题(2022最新版)

    作为 Java 的从业者 在找工作的时候 一定会被问及关于 JVM 相关的知识 JVM 知识的掌握程度 在很多面试官眼里是候选人技术深度的一个重要评判标准 小编分享的这份Java后端开发面试总结包含了JavaOOP Java集合容器 Jav
  • mybatis plus中编写sql语句

    sql 语句是写在对应的xml文件中 首先要解决maven默认不加载xml文件的问题 1 首先要写入相关配置文件 在pom 导入下面内容
  • 网工学习笔记(四):办公网络布线

    办公网络布线 1 综合布线系统主要由哪几个子系统组成 工作间子系统 水平子系统 设备间子系统 垂直间子系统 管理间子系统 建筑群子系统 2 工作区子系统又称为什么 服务区子系统 3 水平子系统连接哪两个子系统 工作间子系统 管理间子系统 4
  • 通讯录进阶——动态通讯录

    通讯录进阶 动态通讯录 大体思路 改编通讯录的结构体 初始化通讯录的修改 增加函数的修改 退出通讯录函数的实现 代码一览图 Contact c main c Contact h 大体思路 今天我们将来实现一下基于我之前博客里的通讯录的进阶
  • Linux 练习十三 (Linux网络编程epoll + 源码练习)

    文章目录 4 EPOLL多路复用 4 1 epoll介绍 4 2 epoll接口的使用 4 3 示例 使用epoll实现即时聊天 4 4 epoll和select的优缺点 使用环境 Ubuntu18 04 使用工具 VMWare works

随机推荐