朱艷,趙香
(中國電子科技集團第38研究所,合肥 230088)
一種基于開源框架面向DSP的系統級調試工具
朱艷,趙香
(中國電子科技集團第38研究所,合肥 230088)
提出了一種支持數字信號處理器(DSP)操作系統的的系統級調試工具。該工具基于Eclipse開源框架,能夠方便集成到現有DSP集成開發環境中。通過在目標機嵌入式操作系統上運行的一個調試代理任務,系統調試工具能夠與目標系統進行以太網通信,獲取系統對象的信息,并在可視化界面上呈現給用戶。通過該操作系統調試工具,用戶可以觀察和跟蹤目標系統上的各種對象和事件,包括任務、信號量等。
嵌入式操作系統;系統級調試;集成開發環境;DSP
DSP是一種用于處理數字信號的專用處理器。在電子技術各個領域(例如雷達、聲納、語音通信、數字通信等),正廣泛使用DSP處理器搭建的系統處理日益龐大的數字信息。
“魂芯”[1]系列DSP是中國電子科技集團公司第三十八研究所設計開發的一系列高性能DSP,適用于雷達信號處理、電子對抗、精確制導、通信保障及圖像處理等領域。基于VLIW+SIMD架構,“魂芯”系列DSP具有強大的并行處理能力,滿足高速實時信號處理的應用要求。
隨著DSP運算能力的日益增強,已經能夠在DSP上為每個應用分配一個任務,并保證每個應用滿足所要求的實時性。為了實現多任務并行、任務間通信和調度,“魂芯”DSP提供一個實時嵌入式操作系統,具有很好的實時性能,能夠實現多任務,具有負責任的終端管理和高度的可配置性。
要實現在多任務操作系統上的調試,僅依靠傳統的源代碼調試是不夠的。一方面,代碼級調試可能打亂原有的任務調度行為,導致調試結果與實際運行結果不一致;另一方面,當程序出現死鎖、內存泄漏等問題時,代碼級調試也不能及時定位問題。因此,需要一個系統級調試工具,能夠在不打斷程序運行的情況下,查看和追蹤系統運行情況。通過觀察多任務環境中各系統對象的信息,檢測系統事件,定位和解決目標系統中的問題點。

圖1 系統級調試工具架構
DSP系統級調試工具的軟件架構如圖1所示。該工具集成在“魂芯”DSP的集成開發環境Efficient Coding Studio (ECS)[2]中,由基于Eclipse的集成開發環境ECS、調試引擎、調試代理任務組成。ECS與調試引擎之間采取Java API通信,調試引擎與目標機之間采取以太網通信。
如果使用系統級調試工具,用戶在編譯代碼時必須把調試代理任務鏈接入可執行文件中。用戶可以使用ECS加載生成的程序,并啟動運行;也可以通過其他方式把程序在目標機上加載運行。
程序在目標機上運行后,用戶可以使用系統級調試工具與目標機建立連接,查看目標機每個核上所運行的任務列表和任務詳細,也可以查看其他操作系統上的對象。
系統級調試工具的用戶界面如圖2所示。左邊的連接視圖用于管理目標機連接,用戶可以在該視圖上新建和刪除目標機連接。連接視圖的樹形結構顯示所有的已連接目標機的核列表。右下角是指定核上的任務列表信息,能夠顯示任務的ID、名稱、狀態和優先級,用戶可以點擊“刷新”按鈕刷新該視圖的信息。右上角左邊是任務詳細內容視圖,顯示選中任務的其他詳細信息,如任務棧地址、任務棧長度等。用戶也可以對該視圖內容進行刷新。右上角右邊是目標機控制臺打印信息。

圖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