APP下载

一种基于开源框架面向DSP的系统级调试工具

2017-07-31朱艳赵香

单片机与嵌入式系统应用 2017年7期
关键词:信号量编辑器视图

朱艳,赵香

(中国电子科技集团第38研究所,合肥 230088)

一种基于开源框架面向DSP的系统级调试工具

朱艳,赵香

(中国电子科技集团第38研究所,合肥 230088)

提出了一种支持数字信号处理器(DSP)操作系统的的系统级调试工具。该工具基于Eclipse开源框架,能够方便集成到现有DSP集成开发环境中。通过在目标机嵌入式操作系统上运行的一个调试代理任务,系统调试工具能够与目标系统进行以太网通信,获取系统对象的信息,并在可视化界面上呈现给用户。通过该操作系统调试工具,用户可以观察和跟踪目标系统上的各种对象和事件,包括任务、信号量等。

嵌入式操作系统;系统级调试;集成开发环境;DSP

引 言

DSP是一种用于处理数字信号的专用处理器。在电子技术各个领域(例如雷达、声纳、语音通信、数字通信等),正广泛使用DSP处理器搭建的系统处理日益庞大的数字信息。

“魂芯”[1]系列DSP是中国电子科技集团公司第三十八研究所设计开发的一系列高性能DSP,适用于雷达信号处理、电子对抗、精确制导、通信保障及图像处理等领域。基于VLIW+SIMD架构,“魂芯”系列DSP具有强大的并行处理能力,满足高速实时信号处理的应用要求。

随着DSP运算能力的日益增强,已经能够在DSP上为每个应用分配一个任务,并保证每个应用满足所要求的实时性。为了实现多任务并行、任务间通信和调度,“魂芯”DSP提供一个实时嵌入式操作系统,具有很好的实时性能,能够实现多任务,具有负责任的终端管理和高度的可配置性。

要实现在多任务操作系统上的调试,仅依靠传统的源代码调试是不够的。一方面,代码级调试可能打乱原有的任务调度行为,导致调试结果与实际运行结果不一致;另一方面,当程序出现死锁、内存泄漏等问题时,代码级调试也不能及时定位问题。因此,需要一个系统级调试工具,能够在不打断程序运行的情况下,查看和追踪系统运行情况。通过观察多任务环境中各系统对象的信息,检测系统事件,定位和解决目标系统中的问题点。

1 概 述

图1 系统级调试工具架构

DSP系统级调试工具的软件架构如图1所示。该工具集成在“魂芯”DSP的集成开发环境Efficient Coding Studio (ECS)[2]中,由基于Eclipse的集成开发环境ECS、调试引擎、调试代理任务组成。ECS与调试引擎之间采取Java API通信,调试引擎与目标机之间采取以太网通信。

如果使用系统级调试工具,用户在编译代码时必须把调试代理任务链接入可执行文件中。用户可以使用ECS加载生成的程序,并启动运行;也可以通过其他方式把程序在目标机上加载运行。

程序在目标机上运行后,用户可以使用系统级调试工具与目标机建立连接,查看目标机每个核上所运行的任务列表和任务详细,也可以查看其他操作系统上的对象。

系统级调试工具的用户界面如图2所示。左边的连接视图用于管理目标机连接,用户可以在该视图上新建和删除目标机连接。连接视图的树形结构显示所有的已连接目标机的核列表。右下角是指定核上的任务列表信息,能够显示任务的ID、名称、状态和优先级,用户可以点击“刷新”按钮刷新该视图的信息。右上角左边是任务详细内容视图,显示选中任务的其他详细信息,如任务栈地址、任务栈长度等。用户也可以对该视图内容进行刷新。右上角右边是目标机控制台打印信息。

图2 系统级调试工具用户界面

2 系统设计

2.1 调试代理任务

调试代理任务的功能是在目标机系统建立一个服务器,负责与上位机建立连接、根据上位机的请求控制目标系统的运行,读取或记录目标机的信息,按照收到的请求向上返回结果。

调试代理任务作为一个用户任务在目标机系统上运行。“魂芯”DSP处理器目前支持的操作系统是基于RTEMS[3]移植裁剪而成。RTEMS具有源码公开、高安全性、小内核、易于移植的特点,且支持单线程和多线程,API丰富[4]。

调试代理任务在收到上位机的调试命令后,首先禁止操作系统内的任务调度,避免同步问题。完成调试操作后,再放开任务调度。

调试代理任务也会接收上位机发出的开始和停止操作系统事件记录的调试命令,在内部维护一个缓存,在记录时把操作系统的事件存储到缓存中。事件包括任务切换、信号量创建、获取和释放、消息序列的创建、消息进出消息队列、ISR、处理器异常等。在完成系统事件记录后,在上位机的请求下,调试代理任务能够把记录的所有事件打包上传给上位机。

2.2 调试引擎

调试引擎是主机上的一组Java API,主要用于实现与调试代理任务之间的调试信息协议,负责把用户的指令封装成socket包,通过网络传送给目标机,并解析目标机从网络传送回来的socket包。

调试引擎定义的调试API包括:与调试代理任务建立连接;与调试代理任务断开连接;获取目标硬件系统的信息;获取目标系统的任务列表和任务的基本信息;查询指定任务的详细信息;获取目标系统的信号量列表和信号量的基本信息;查询指定信号量的详细信息;获取目标系统的消息序列和消息序列的基本信息;查询指定消息序列的基本信息;获取中断信息;获取处理器执行信息;获取内存分区和内存块的信息;开始和停止调试代理任务对系统事件的记录;要求调试代理任务上传事件信息。

2.3 ECS界面设计

为了在ECS中集成系统级调试功能,设计了cn.com.cetc38.ecs.epos.core和cn.com.cetc38.ecs.epos.ui两个Eclipse插件,以实现系统级调试功能的动态加载,并与ECS原有的源代码调试插件独立分离。

首先,设计了一个单独的透视图“EPOS调试”,在这个透视图中集成所有的系统级调试视图(包括目标机连接视图、任务视图、信号量视图等),并容纳各种编辑器(包括任务详细编辑器、信号量详细编辑器等)。“EPOS调试”透视图的定义如下:

class="cn.com.cetc38.ecs.debug.system.ui.ECSSystemDebugPerspectiveFactory"

id="cn.com.cetc38.ecs.debug.system.ui.perspective"

name="EPOS调试">

透视图的定义类ECSSystemDebugPerspectiveFactory实现org.eclipse.ui.IPerspectiveFactory接口,定义了“EPOS调试”透视图的布局。

“EPOS调试”透视图中所有的视图都是树状结构,按照调试系统框架[5](Debugging System Framework, DSF)、视图模型匹配器SystemDebugModelAdapter根据视图的表现上下文PresentationContext查找与每个视图匹配的内容提供器ContentProvider、标签提供器LabelProvider和模型代理ModelProxy。这些类定义了具体数据如何在某一视图上显示。

“目标机连接”视图的定义如下:

category="cn.com.cetc38.ecs.debug.system.ui.categotory"

class="cn.com.cetc38.ecs.debug.system.ui.views.EPOSTargetView"

id="cn.com.cetc38.ecs.debug.system.ui.targetView"

name="目标机连接"

restorable="true">

目标机连接视图的实现类EPOSTargetView维护一个调试树TreeModelViewer实例,用于实现视图中的树结构,并与指定的模型连接。另外,EPOSTargetView还维护一个表述上下文PresentationContext实例,用于调试树TreeModelViewer在适配器中得到与本视图对应的指定元素的内容提供器ContentProvider、标签提供器LabelProvider和模型代理ModelProxy等。

另外,目标机连接视图还实现了一个全局调试上下文提供器的功能,即在连接视图树上选择不同的节点,其他视图会相应地显示与该节点对应的信息。这是通过在全局的调试上下文服务IDebugContextService中注册一个TreeViewerContextProvider实例作为调试上下文提供器。并且在调试树上注册一个监听者SelectionListener,当在调试树上点击节点时,TreeViewerContextProvider就会把这个点击事件通知IDebugContextService中注册的所有调试上下文监听者DebugContextListener。任务级调试的所有视图,包括任务视图、信号量视图等都必须实现IDebugContextListener接口,并在IDebugContextService中注册为调试上下文监听者。

在目标机连接视图中添加了两个视图按钮,分别为“连接”按钮和“断开连接”按钮,利用视图按钮扩展点org.eclipse.ui.viewActions。两个按钮的定义如下:

targetID="cn.com.cetc38.ecs.debug.system.ui.targetView">

class="cn.com.cetc38.ecs.debug.system.ui.actions.DisconnectActionDelegate"

icon="icons/disconnect.gif"

id="cn.com.cetc38.ecs.debug.system.ui.disconnectAction"

label="断开连接"

style="push"

toolbarPath="additions">

class="cn.com.cetc38.ecs.debug.system.ui.actions.ConnectActionDelegate"

icon="icons/connect.gif"

id="cn.com.cetc38.ecs.debug.system.ui.connectAction"

label="连接"

style="push"

toolbarPath="additions">

当用户在目标连接视图点击“连接”按钮时,ECS会弹出一个对话框要求用户输入要连接目标机的IP地址和端口号,用户输入后,ECS通过调试引擎与目标机上运行的调试代理程序建立连接,并获取目标机的硬件信息,显示在目标机连接视图的树状结构中。

建立连接的函数调用如图3所示。

图3 新建连接的调用图

由图3可知,用户点击“连接”按钮,触发该按钮关联的ConnectActionDelegate实例的run()方法,在这个方法中调用了ConnectionManager的addConnection方法。ConnectionManager是一个全局的单例类,用来管理所有的目标机连接。ConnectionManager把新建连接这个消息广播出去,这个消息会异步触发ConnectionManagerProxy类中的connectionAdded方法,ConnectionManagerProxy就是在适配器中与目标机连接视图适配的模型代理。ConnectionManagerProxy把新建连接消息转化为一个ModelChangedEvent事件,并把这个事件再次转发。由于内容提供器ContentProvider实现了ModelChangedListener接口,在收到ModelChangedEvent消息后会刷新视图中的树状结构。从而目标机连接视图上会出现新的目标机节点,如果目标机为多核,该目标机节点下会显示每个核。断开连接的处理过程与新建连接相似,不再赘述。

任务视图、信号量视图、消息队列视图与目标机连接视图的实现相似,都是扩展org.eclipse.ui.views扩展点,实现类中维护TreeModelViewer实例实现的。唯一的不同就是在适配器中注册的是不同的ContentProvider、LabelProvider和ModelProxy。

对于任务详细信息、信号量详细信息等,ECS采用编辑器的方式来显示,因为相比于视图,编辑器能够处理更加复杂的信息,可以嵌入各种图表,且能够采用多标签的方式多角度呈现指定对象的各种信息。任务详细信息编辑器的定义如下:

class="cn.com.cetc38.ecs.debug.system.ui.editors.TaskDetailEditor"

id="cn.com.cetc38.ecs.debug.system.ui.task.detail.editor"

matchingStrategy="cn.com.cetc38.ecs.debug.system.ui.editors.TaskDetailEditorMatchingStrategy"

name="Task Detail Editor">

编辑器的定义类TaskDetailEditor是一个org.eclipse.ui.forms.editor.FormEditor的子类,这样可以在编辑器中支持多页面。目前,在任务详细信息的编辑器中仅有“概述”页面,显示任务的ID、名称、运行状态、入口地址、初始化优先级、当前优先级、任务栈基址、任务栈长度、任务模式、任务属性、任务调度算法、任务运行时间、任务时间片大小、等待资源ID、当前任务切换的栈底、当前任务切换的栈顶等基本信息。

当用户在任务视图双击某一任务时,会自动打开一个任务详细信息编辑器。这是通过在任务视图中的

System Debugging Tool for DSP Based on Open-source Framework

Zhu Yan,Zhao Xiang

(CETC No.38 Research Institute,Hefei 230088,China)

A system debuggingtool for digital signal processor (DSP) is proposed in the article.The tool is based on Eclipse open-source framework,and is convenient to integrate in the current development environment.By communicating with a debugging agent running on the target embedded operation system through Ethernet,the tool can obtain information of the system objects,and present it to users.The users can view or trace objects and events of the target system with the tool including tasks,semaphores and so on.

embedded operation system;system debugging;integrated develop environment;DSP

TP368

A

猜你喜欢

信号量编辑器视图
基于STM32的mbedOS信号量调度机制剖析
你距离微信创作达人还有多远?
Nucleus PLUS操作系统信号量机制的研究与测试
车辆段收发车运行图编辑器的设计与实现
5.3 视图与投影
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
基于VLIW目标机的ELF二进制编辑器设计与实现
μC/OS- -III对信号量的改进