本文博客链接:http://blog.csdn.net/bjr2016,作者:bjr2016,未经允许不得转载.
本节描述SystemView分析和可视化工具。
SystemView 程序
这个SystemView程序是SEGGER SystemView主机端可视化工具软件。它和目标板通过J-Link连接,控制跟踪并读取应用程序的数据。实时分析监视数据并显示在SystemView不同的窗口中。再跟踪停止后,数据可以保存成一个文件以便于后续分析。
如何启动SystemView,请参考前面的章节。
SystemView提供不同的窗口来展示系统的运行,测量时间并分析CPU负载。所有窗口都是同步的,以获得当前选定状态的所有信息。
有关应用程序窗口的描述,请参阅以下部分。
使用SystemView,可以通过监视的数据跟踪系统中发生的情况。
以下时间轴全部表示为Timeline
SystemView Timeline
Timeline窗口在一个界面中集中了所有系统信息。它在系统时间线上显示了系统活动(任务、中断、调度器、定时器和空闲)。它显示在被监视的应用程序中使用的所有上下文项,且每行显示一个上下文项。
在鼠标经过上下文项时,会有tip工具显示更多的细节和运行时信息。
在鼠标经过活动上下文时,tip工具提示显示当前事件的详细信息和当前活动的函数(如果可用的话)。
在上下文上面的那个尺子标记了当前活动的时间段范围。
存在的任务会被标记为浅色的背景,提供了从它第一次运行一直到它结束期间的每一次运行。
上下文切换会被现实为连接线,以便于地识别哪些事件导致上下文切换,并且何时发生。
处于ready状态的任务,在开始执行前会被显示在浅灰色的栏中。
上下文是按优先级排序的。第一行显示了一个统一上下文中的所有活动。列表的顶部是中断,用Id来排序的,接下来是scheduler调度器和软件定时器(如果在系统中使用这些的话)。在调度器(和定时器)下面,任务按优先级排序。当没有其他上下文处于活动状态时,底层上下文显示空闲时间。
Timeline是和事件列表Events list同步显示的。在光标(蓝色行)下面的事件是列表中被选中的事件。
光标可以固定在10%到90%的窗口,并在滚动时间线时更新列表中的选择。
可以将事件拖放到事件列表中,来选择事件列表中的相应事件,反之亦然。
时间轴视图可以放大或缩小,来了解整个系统的概况,或者查看事件的确切时间。
要跳转到上下文的下一个或之前的活动,可以用鼠标单击左侧的箭头或者右侧的箭头。
Events窗口显示系统发送的所有事件,并显示它们的信息。每个事件都有以下几项:
Event窗口允许通过列表,跳转到下一个或之前的上下文,或跳转到下一个或之前的类似事件。Timeline和CPU负载窗口同步显示当前选中的Event。
Events列表中的时间戳可以相对于记录的开始或者系统发送的目标系统时间。Event可以设置为跟踪事件的时间引用,以便在Event发生后可以轻松地测量Event。
SystemView包括一个Events筛选器来选择show或hide api、ISRs、系统信息、消息、任务和用户事件。
终端窗口显示来自目标应用程序的printf输出,以及发出log输出的任务上下文,以及发送消息时的时间戳。双击消息,可以显示出该消息在事件列表中的所有信息。
Timeline窗口显示的是输出的指示器,根据级别排序(错误总是排在顶部)。显示的日志级别可以通过View -> Message Indicators… 来配置。
Message Indicator 对话框
SystemView printf的输出是由通过用户应用程序格式化的,也可以所有参数先不格式化,而通过SystemView应用程序进行格式化。
CPU load窗口显示了一个周期内上下文占用的CPU时间。CPU负载是用一个使用Timeline当前分辨率的bin的宽度来测量的,因此与缩放级别是同步的。
可以通过选择bin的数量用来测量较短或较长时期的负载。使用一个bin,就可以在整个可见的时间轴上测量CPU负载。
Context窗口显示上下文的统计信息(任务、中断、调度器和空闲)。每个上下文项可以通过它的名称和类型来标识。类型包括任务的优先级和中断的ID。(例如,cortex-m的SysTick是中断ID # 15)。
Context窗口信息包括以下内容:
在记录时,上下文窗口是实时更新的,而当前上下文可以通过选择行来指示。
右上角的窗口显示:
系统信息包括应用程序名称、使用的OS、目标设备和时间信息。有关任务开关和中断频率的附加信息提供了系统的快速概览。
记录的属性可以由用户在保存时进行设定,并和记录一起存储,并允许在加载后识别记录,以便稍后进行分析。
事件窗口对事件进行筛选。这可以用于隐藏中断事件或只显示任务执行。
可以设定不同的组过滤SystemView事件:
SystemView PRO还提供自定义过滤器,它允许选择显示或隐藏的任何事件。使用curstom过滤器,可以单独选择所有系统事件和注册的操作系统和中间件事件。
当SystemView在连续模式下记录时,记录的事件会实时分析和显示。触发器模式允许在发生特定事件时自动选择事件。
触发器模式可以在工具栏中选择,也可以在任务的右键菜单中选择,并在Timeline窗口中中断。
在手动滚动模式下,选择不会自动更新。在记录时用户可以滚动事件,分析系统。
在自动滚动模式下,自动同步成100ms的时间步伐。会自动选择在最后一个100ms记录的事件。
在连续触发器模式下,用户可以配置上下文(任务或中断),以及触发哪个事件。然后SystemView总是选择最后发生的符合配置条件的事件。
在单触发器模式下,SystemView只选择一次满足配置条件的事件,并自动切换回手动滚动模式。
SystemView可以通过鼠标和键盘来控制,也可以通过菜单来控制。最重要的控件也可在工具栏中访问。
下表描述了SystemView的操作:
含义 | 菜单 | 快捷键 |
---|---|---|
目标板开始记录 | Target->Start Recording | F5 |
停止记录 | Target->Stop Recording | F9 |
从系统读取先前的或者单次数据 | Target->Read Recorded Data | Ctrl+F5 |
保存记录的数据到一个文件中 | File->Save Data | Ctrl+S,F2 |
加载一个记录文件 | File->Load Data | Ctrl+O,F3 |
加载一个最近使用的文件 | File->Recent Files | 无 |
加载一个示例记录 | File->Sample Recordings | 无 |
查看/修改记录属性 | File->Recording Properties | Ctrl+Shift+R |
含义 | 菜单 | 快捷键 |
---|---|---|
设定/清除当前事件作为时间参考 | View->Toggle Reference | R |
移除所有时间参考 | View->Clear References | Ctrl+Shift+R |
显示目标的时间戳 | View->Display Target Time | 无 |
显示从记录起始所有时间戳 | View->Display Recording Time | 无 |
设定时间戳分辨率为1us | View->Resolution:1us | 无 |
设定时间戳分辨率为100ns | View->Resolution:100ns | 无 |
设定时间戳分辨率为10ns | View->Resolution:10ns | 无 |
设定时间戳分辨率为1ns | View->Resolution:1ns | 无 |
放大 | View->Zoom->Zoom In | Ctrl++,滚轮向上 |
缩小 | View->Zoom->Zoom Out | Ctrl–,滚轮向下 |
Timeline(时间轴)显示到XX us | View->Zoom->XX us Window | 无 |
Timeline(时间轴)显示到XX ms | View->Zoom->XX ms Window | 无 |
Timeline(时间轴)显示到XX s | View->Zoom->XX s Window | 无 |
在Timeline显示所有记录 | View->Zoom->Full Recording | 无 |
将光标设定到Timeline(时间轴)的10% | View->Cursor->Cursor at 10% | 1 |
将光标设定到Timeline(时间轴)的20% | View->Cursor->Cursor at 20% | 2 |
将光标设定到Timeline(时间轴)的30% | View->Cursor->Cursor at 30% | 3 |
将光标设定到Timeline(时间轴)的40% | View->Cursor->Cursor at 40% | 4 |
将光标设定到Timeline(时间轴)的50% | View->Cursor->Cursor at 50% | 5 |
将光标设定到Timeline(时间轴)的60% | View->Cursor->Cursor at 60% | 6 |
将光标设定到Timeline(时间轴)的70% | View->Cursor->Cursor at 70% | 7 |
将光标设定到Timeline(时间轴)的80% | View->Cursor->Cursor at 80% | 8 |
将光标设定到Timeline(时间轴)的90% | View->Cursor->Cursor at 90% | 9 |
在1个bin中测量CPU负载 | View->CPU Load->Single Bin | 无 |
在10个bin中测量CPU负载 | View->CPU Load->10 Bins | 无 |
在50个bin中测量CPU负载 | View->CPU Load->50 Bins | 无 |
在100个bin中测量CPU负载 | View->CPU Load->100 Bins | 无 |
在200个bin中测量CPU负载 | View->CPU Load->200 Bins | 无 |
显示/隐藏事件列表中的API调用事件 | View->Event Filter->Show APIs | Shift+A |
显示/隐藏事件列表中的中断进出事件 | View->Event Filter->Show ISRs | Shift+I |
显示/隐藏事件列表中的消息(Message) | View->Event Filter->Show Messages | Shift+M |
显示/隐藏事件列表中的系统事件 | View->Event Filter->Show System Events | Shift+S |
显示/隐藏事件列表中的任务活动事件 | View->Event Filter->Show Tasks | Shift+T |
显示/隐藏事件列表中的用户事件 | View->Event Filter->Show User Events | Shift+U |
在事件列表中只显示API调用事件 | View->Event Filter->Show APIs only | Ctrl+Shift+S |
在事件列表中只显示中断进出事件 | View->Event Filter->Show ISRs only | Ctrl+Shift+I |
在事件列表中只显示消息Message | View->Event Filter->Show Messages only | Ctrl+Shift+M |
在事件列表中只显示任务活动事件 | View->Event Filter->Show Tasks only | Ctrl+Shift+T |
在事件列表中只显示用户事件 | View->Event Filter->Show User Events only | Ctrl+Shift+U |
复位所有事件过滤器 | View->Event Filter->Reset all Filters | Ctrl+Shift+Space |
自动滚动到新事件上的最后一项 | View->Auto Scroll | 无 |
选择要在时间轴上显示的消息指示器 | View->Message Indicators | Ctrl+M |
在记录时,手动滚动事件 | 工具条 | Ctrl+1 |
在记录时,自动滚动事件 | 工具条 | Ctrl+2 |
在记录时,不停地触发和滚动一个条件 | 工具条 | Ctrl+3 |
在记录时,单次触发和滚动一个条件 | 工具条 | Ctrl+4 |
配置触发条件 | 工具条 | Ctrl+T |
含义 | 菜单 | 快捷键 |
---|---|---|
跳到下一个上下文切换 | Go->Forward | F |
跳到前一个上下文切换 | Go->Back | B |
跳到下一个相似事件 | Go->Next [Event] | N |
跳到前一个相似事件 | Go->Previous [Event] | P |
跳到同一个上下文中的下一个相似事件 | Go->Next [Event] in [Context] | Shift+N |
跳到同一个上下文中的前一个相似事件 | Go->Previous [Event] in [Context] | Shift+P |
打开根据Id跳转到事件的对话框 | Go->Go to Event… | Ctrl+G |
打开根据时间戳跳转到事件的对话框 | Go->Go to Timestamp… | Ctrl+Shift+G |
向前方滚动(未来) | Go->Scroll Forward | 左键,Ctrl+滚轮向上滚,单击并拖动 |
向后方滚动(以前) | Go->Scroll Back | 右键,Ctrl+滚轮向下滚,单击并拖动 |
含义 | 菜单 | 快捷键 |
---|---|---|
显示/隐藏 事件窗口 | Window->Events View | E |
显示/隐藏 Timeline(时间轴)窗口 | Window->Time View | T |
显示/隐藏 CPU Load(CPU负载)窗口 | Window->CPU Load View | L |
显示/隐藏 Contexts(上下文)窗口 | Window->Context View | C |
显示/隐藏 Terminal(终端)窗口 | Window->Terminal View | M |
显示/隐藏 System information(系统信息)窗口 | Window->Sytem View | S |
显示/隐藏 Log(日志)窗口 | Window->Log View | O |
显示/隐藏 状态栏 | Window->Show/Hide Status Bar | 无 |
显示/隐藏 工具栏 | Window->Show/Hide Tool Bar | 无 |
打开程序首选项对话框 | Tool->Preferences | Alt+, |
含义 | 菜单 | 快捷键 |
---|---|---|
打开SystemView手册(即本手册) | Help->SystemView Manual | F11 |
显示SystemView版本信息 | Help->About SystemView | F12 |
SystemView可以通过命令行选项进行控制和配置。在启动记录时要跳过配置对话框,可以通过命令行选项给出目标配置。
C:> SystemView.exe [-usb []]|[-ip ] [-device ] [-if SWD|
JTAG|FINE] [-speed ] [-rttcbaddr ]|[-rttcbrange auto|] [-
single [-port ] [-wait]] [-start|-stop|-read|-quit|-save []|-
load[]]
Command Line Options:
-usb Connect to J-Link via USB. Parameter: S/N of JLink. (Optional)
(要连接的J-Link S/N号,参数为J-Link的S/N号,可选)
-ip Connect to J-Link via IP. Parameter: IP or S/N of J-Link.
(通过IP地址连接J-Link,参数为IP地址或者J-Link的S/N号)
-device Set the target device. Parameter: Device name as supported by J-Link.
(目标设备名,参数为J-Link支持的设备名,一般为芯片型号)
-if Set the target interface. Parameter: SWD, JTAG,or FINE.
(目标板连接接口。参数为:SWD,JTAG或者FINE)
-speed Set the target interface speed. Parameter: Speed in kHz.
(目标板接口连接速率。参数为:速率,单位是kHz)
-jtagconf Set the JTAG scan chain configuration. Parameter: IRPre and DRPRe of the target device.
(设定JTAG扫描链配置。参数为:目标设备的IRPre和DRPRe)
-rttcbaddr Set the RTT Control Block address. Parameter: Address in hexadecimal.
(RTT控制块地址。参数为:十六进制地址)
-rttcbrange Set the search range for RTT Control Block. Parameter: auto or ranges as " ".
(RTT控制块寻址范围。参数为:auto或者表示成"".)
-single Start SystemView in single instance mode.
(单一实例模式下的单启动系统视图。)
-port Set local port for single instance mode. Parameter: Port.
(设定单实例模式下的本地端口。参数为:端口号)
-wait Wait for first instance to return result.
(等待第一个实例返回结果)
-start Start recording.
(启动记录)
-stop Stop recording.
(停止记录)
-read Read recorded data from target.
(从目标板读取记录)
-quit Quit SystemView.
(退出SystemView)
-save Save current recording. Parameter: File to save to. (Optional)
(保存当前记录到文件,参数为:要保存到的文件名。(可选))
-load Load a recording from file. Parameter: File to
(从文件中加载一个记录,参数为:要加载的文件名)
load. (Optional)