小狐狸的正确使用手册(pthread_create参数详解

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

2 开始使用SystemView本节介绍如何开始使用se gger系统视图。 说明了根据监视数据分析APP应用程序的方法。

本章引用的示例数据文件是OS_IP_WebServer.SVDat。 此文件包含在se gger系统视图包中。

此范例资料档显示了执行embOS即时系统、embOS/IP TCP/IP协定堆叠和web伺服器APP应用程式的目标系统的行为。

使用SEGGER SystemView获取的信息分析APP应用程序正在进行的操作。

2.1 启动SystemView并加载数据SystemView可以在线监视目标APP应用程序数据。 这些监视数据可以保存为一个文件,以供后续工作。 此外,存储的数据可以在没有J-Link或没有目标硬件或目标APP应用程序的情况下进行分析。 因此,允许没有物理访问权限的开发人员分析系统。

如果从开始菜单或安装目录启动SystemView程序(SystemView.exe ),则在首次启动SystemView时,系统将提示您打开示例记录。 单击Yes启动后,选择File-Sample Recordings -软件包的安装目录/Sample/OS_IP_WebServer.SVdat。 SystemView加载和分析这些数据,并显示已加载记录的系统信息。 请参考下图。

加载了数据文件之后的SystemView

2.2 首先看一下这个系统首先查看这些数据,获取有关监控系统的信息。

系统信息

加载数据后显示的系统信息对话框显示记录的第一个摘要。 显示有关目标系统的信息、任务记录和统计信息、中断和事件。 由于系统信息是由APP应用程序发送的,因此系统视图不需要其他配置来分析和查看系统行为。

系统视图时间轴

时间轴(Timeline)

窗口显示完整的监视数据。 在事件列表中,滚动到第一个项目的开头。

时间线使用系统时间可视化系统活动(任务、中断、调度程序和空闲)。 每一行都可以查看一个上下文项目,以确定被监视的APP应用程序中使用的所有项目

首先,可以看到有两个任务: IP_Task和IP_WebServer,它们被标记为明亮的背景色。

的时间轴宽度扩大到2.0ms,然后双击“1000us”下的垂直线将其居中,以选择项目。 (使用鼠标滚轮、工具栏项目、ctrl/-键或View-Zoom In、View-Zoom Out缩放。)。

SysTick每毫秒中断一次,有几个系统活动。

将鼠标移动到背景名称上可显示上下文类型的详细信息和运行时间信息。

单击IP_Task背景中的右箭头按钮可跳至下一次执行。 放大或缩小活动的详细信息。

可以看到,SysTick中断返回到操作系统调度程序,IP_Task在IP_Task行的灰色栏中显示并运行。 IP_Task从embOS API函数os_waiteventTimed返回,返回值为0,表示当前没有事件发生。

IP_Task调用另外三个具有快速返回和操作系统os_waiteventTimed的embOS API函数,以激活调度程序、禁用任务和使系统空闲(idle )。 发生事件(EventMask=1)或10ms超时后,IP_Task再次处于活动状态。

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

结论

我们拿到了一些关于监控系统的第一手资料。 从时间轴可以看到APP应用程序使用了什么任务和中断。 这由1 kHz SysTick中断控制,并且IP_Task至少每10 ms激活一次。

2.3 分析系统活动获得一些系统信息后,分析系统是如何激活的。

系统事件列表

事件列表

“事件”列表显示从系统发送的所有事件,并显示事件的时间戳、活动的上下文、事件类型和事件详细信息等信息。 与时间线同步。

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

转至View-Go to Event…(快捷键为Ctrl G )事件,在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检查系统所做的事是否和期望的一致。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注