吳迪 代中華
(上海船舶電子設備研究所 上海市 201108)
VxWorks 是由美國Wind River System 公司推出的一款具有微內核、可裁剪的實時操作系統。它以其強大實時性、良好的可靠性、靈活的可裁剪性被廣泛應用在高精尖技術及對實時性要求極高的領域,如航空航天、通信控制、軍事國防、交通運輸、醫療設備等。串行接口簡稱串口,是一種采用串行通信方式的擴展接口,按位來發送和接收字節,如圖1所示。其特點是通信線路簡單、傳輸距離長,只要一對傳輸線就能實現雙向通信,成本較低。所以在VxWorks操作系統下采用串口通訊可以高效、方便的實現數據交互功能。但是,基于VxWorks 操作系統下的設備在串口模塊開發、設備間的串口數據調試過程中缺少一款能夠實時顯示串口接收數據、模擬發送串口數據的調試工具。針對于以上背景本文提出了一種基于VxWorks 操作系統的串口調試系統的設計思想,可在設備中嵌入串口調試模塊,當調試人員按下某個按鍵時即可調用串口調試模塊,進而完成與其他設備間的串口數據調試工作。
串口調試系統主要由硬件部分和軟件部分組成。其中,硬件部分主要包括主板模塊和串口通訊板模塊,通過PCI 總線相連。PCI總線為穿插在系統總線和CPU 之間的一級總線,通過橋接電路保證了其上下接口的協調性,完成了對它的管理工作,并對數據進行傳輸。軟件部分則安裝于主板模塊板載的電子盤上,軟件分為主控模塊、串口通訊模塊、顯示控制模塊,分別完成系統的主控、串口通訊和顯示控制功能。系統總體設計圖如圖2所示。
主板模塊以Intel Core Duo 低電壓雙核處理器為核心,主頻為1.66GHz;采用Intel 945GME 及ICH7M 芯片組;顯示采用ATI Mobility X300 獨立圖形引擎,提供1 路VGA 接口和2 路DVI 接口;主板模塊板載IDE 電子盤,用于安裝VxWorks 操作系統和串口調試系統軟件。

圖1:串口通信示意圖

圖2 系統總體設計

圖3:軟件界面

圖4:各軟件模塊間接口關系

圖5:數據處理流程圖
串口通訊板模塊通過PCI 總線為主板模塊提供擴展串行并行I/O 的能力和中斷能力。該模塊共有8 個串行接口和48 根并行I/0 線。串口通訊板模塊根據功能可以分為PCI 總結接口、串行I/O 接口、并行I/O 接口三部分。
PCI 總線的主頻為33MHz,數據位寬為32 位,SLAVE 模式。串口通訊板模塊主要通過它的8 位I/O 端口讀寫周期來訪問。
串行接口由1 片0X16PCI954 和1 片0X16C954 可編程異步串行通訊芯片組成,對所有的串口信號都進行了光電隔離。每個芯片各提供4 個異步串行接口。每個串行接口的發送器和接收器的先進先出緩沖區容量為128 字節。并且具備對調制解調器的控制功能。
并行I/O 接口由2 片8255 可編程并行接口芯片組成,每片8255 芯片有3 個8 位的雙向并行I/O 端口,分別為A 口、B 口、C 口。8255 芯片可工作于方式0(基本輸入輸出方式)、方式1(選通輸入輸出方式)、方式2(雙向總線方式)。
串口調試系統軟件是以VxWorks 操作系統、支撐軟件、驅動程序為基礎開發的應用軟件,使用Tornado2.2 基于PC 平臺及Windows 操作系統開發。Tornado 是VxWorks 操作系統下的集成開發環境,它包含了一套完整的面向嵌入式系統的開發調試工具,集成了設計、開發、分析等功能,提供了嵌入式實時應用程序開發的一種有效方式:串口調試系統應用程序在Windows 環境下編譯生成可執行文件,將可執行文件導入目標系統,通過本地主機上的服務器(Target Server)與目標系統的目標代理(Target Agent)的通信完成對串口調試系統應用程序的調試和分析。
串口調試系統軟件運行于VxWorks5.5 操作系統,提供友好、完整的人機交互界面,如圖3所示。界面頂部為串口參數設置區域,可完成對串口號、波特率、校驗位、數據位、停止位的設置及串口的開啟關閉操作;界面中部為接收數據顯示區域,可完成串口數據實時顯示及顯示方式的控制;界面底部為串口數據發送區域,可完成串口發送數據的輸入及發送方式的控制。
本軟件采用模塊化設計思想,將軟件分為主控模塊、串口通訊模塊、顯示控制模塊。各軟件模塊間接口關系如圖4所示。軟件數據處理流程圖如圖5所示。
主控模塊是串口調試系統軟件的控制中心,主要完成初始化串口調試系統內的軟硬件資源、創建并啟動各任務和消息隊列、對其他模塊的調用、顯示初始畫面。當串口調試系統軟件啟動時自動加載主控模塊。通過taskSpawn 函數創建任務,通過msgQCreate 函數創建消息隊列,通過msgQSend 和msgQReceive 完成消息的發送和接收,通過open 和close 函數完成串口的開啟和關閉,通過ioctl函數實現串口的參數設置。示例代碼如下:

串口通訊模塊完成與外部待調試設備間的串口數據交互。在軟件啟動時,創建并激活串口發送、接收任務后,串口發送、接收程序被調用。串口接收任務定時查詢串口接收緩沖區,若有數據就取出并處理;串口發送任務定時查詢是否接收到串口數據發送消息,若接收到消息就拼裝相應數據報文向外送出。通過select 函數監聽串口的可讀事件,如果可讀,則調用read 函數讀取串口數據。通過調用write 函數發送串口數據。主要示例代碼如下:

顯示控制模塊主要完成串口調試系統的界面顯示、控制與處理功能,完成用戶對系統的控制和輸入。包括接收數據的顯示、工作參數的設置、顯示界面的控制和發送數據的輸入。
顯示控制模塊的開發采用了VxWorks 下基于窗口管理及可視化控件的圖形開發工具EGK。EGK 是一種應用于嵌入式系統跨平臺的圖形界面設計工具,包含了人機界面設計中需要的基本窗口和控件,用戶可以根據實際需求對窗口及控件類進行重寫。本文根據串口調試系統界面顯示的內容和特點,主要用到了以下4 個類:全局類Egk、窗口類Egk_Window、控件組類Egk_Group 和控件基類Egk_Widget。
界面中的按鈕采用了Egk_Button 控件,通過callback 函數將按鈕與回調函數關聯,當調試人員點擊按鈕時自動調用回調函數,示例代碼如下:

接收數據顯示區域采用繼承Egk_Box 的自定義控件,默認16進制顯示,一行最多顯示32 個數據。通過自定義函數SetInfo 和draw 更新數據繪制控件,通過redraw 函數刷新界面顯示。界面顯示的控制包括開啟、停止數據接收顯示和清空界面顯示。當調試人員點擊“停止接收”按鈕時軟件停止接收處理串口數據,界面不再刷新顯示;當點擊“開始接收”按鈕時,軟件重新接收并處理顯示串口數據;當點擊“清空顯示”按鈕時清空界面數據顯示。
工作參數菜單采用Egk_Choice 控件,通過menu 完成菜單內容的加載,通過value 取值。參數設置包括對串口號、波特率、校驗位、數據位、停止位的設置。其中,串口號設置可內容為:com1、com2、com3、com4;波特率可設置內容為:300、600、1200、2400、4800、9600、19200、38400、43000、56000、115200;校驗位可設置內容為:無校驗、奇校驗、偶校驗;數據位設置可設置內容為8、7、6;停止位可設置內容為:1、2。
發送數據的控制包括自動發送、發送周期的設置及數據內容的輸入。自動發送的控制采用Egk_Check_Button 控件,通過value 函數讀取控件值,當此控件被勾選時,串口數據發送方式為周期性自動發送,否則為手動發送。發送周期及數據內容的輸入框采用Egk_Input 控件,通過value 函數讀取輸入值。
本文詳細介紹了實時操作系統VxWorks 中串口調試系統的設計和實現方法,克服了VxWorks 系統下串口調試手段的局限性,憑借VxWorks 操作系統優異的實時性、可靠性,提高了串口通信調試的能力。該方法可適用于工業控制、自動化等多個方面,具有一定的工程應用價值。