吳迪 代中華
(上海船舶電子設(shè)備研究所 上海市 201108)
VxWorks 是由美國Wind River System 公司推出的一款具有微內(nèi)核、可裁剪的實時操作系統(tǒng)。它以其強大實時性、良好的可靠性、靈活的可裁剪性被廣泛應(yīng)用在高精尖技術(shù)及對實時性要求極高的領(lǐng)域,如航空航天、通信控制、軍事國防、交通運輸、醫(yī)療設(shè)備等。串行接口簡稱串口,是一種采用串行通信方式的擴展接口,按位來發(fā)送和接收字節(jié),如圖1所示。其特點是通信線路簡單、傳輸距離長,只要一對傳輸線就能實現(xiàn)雙向通信,成本較低。所以在VxWorks操作系統(tǒng)下采用串口通訊可以高效、方便的實現(xiàn)數(shù)據(jù)交互功能。但是,基于VxWorks 操作系統(tǒng)下的設(shè)備在串口模塊開發(fā)、設(shè)備間的串口數(shù)據(jù)調(diào)試過程中缺少一款能夠?qū)崟r顯示串口接收數(shù)據(jù)、模擬發(fā)送串口數(shù)據(jù)的調(diào)試工具。針對于以上背景本文提出了一種基于VxWorks 操作系統(tǒng)的串口調(diào)試系統(tǒng)的設(shè)計思想,可在設(shè)備中嵌入串口調(diào)試模塊,當調(diào)試人員按下某個按鍵時即可調(diào)用串口調(diào)試模塊,進而完成與其他設(shè)備間的串口數(shù)據(jù)調(diào)試工作。
串口調(diào)試系統(tǒng)主要由硬件部分和軟件部分組成。其中,硬件部分主要包括主板模塊和串口通訊板模塊,通過PCI 總線相連。PCI總線為穿插在系統(tǒng)總線和CPU 之間的一級總線,通過橋接電路保證了其上下接口的協(xié)調(diào)性,完成了對它的管理工作,并對數(shù)據(jù)進行傳輸。軟件部分則安裝于主板模塊板載的電子盤上,軟件分為主控模塊、串口通訊模塊、顯示控制模塊,分別完成系統(tǒng)的主控、串口通訊和顯示控制功能。系統(tǒng)總體設(shè)計圖如圖2所示。
主板模塊以Intel Core Duo 低電壓雙核處理器為核心,主頻為1.66GHz;采用Intel 945GME 及ICH7M 芯片組;顯示采用ATI Mobility X300 獨立圖形引擎,提供1 路VGA 接口和2 路DVI 接口;主板模塊板載IDE 電子盤,用于安裝VxWorks 操作系統(tǒng)和串口調(diào)試系統(tǒng)軟件。
圖1:串口通信示意圖
圖2 系統(tǒng)總體設(shè)計
圖3:軟件界面
圖4:各軟件模塊間接口關(guān)系
圖5:數(shù)據(jù)處理流程圖
串口通訊板模塊通過PCI 總線為主板模塊提供擴展串行并行I/O 的能力和中斷能力。該模塊共有8 個串行接口和48 根并行I/0 線。串口通訊板模塊根據(jù)功能可以分為PCI 總結(jié)接口、串行I/O 接口、并行I/O 接口三部分。
PCI 總線的主頻為33MHz,數(shù)據(jù)位寬為32 位,SLAVE 模式。串口通訊板模塊主要通過它的8 位I/O 端口讀寫周期來訪問。
串行接口由1 片0X16PCI954 和1 片0X16C954 可編程異步串行通訊芯片組成,對所有的串口信號都進行了光電隔離。每個芯片各提供4 個異步串行接口。每個串行接口的發(fā)送器和接收器的先進先出緩沖區(qū)容量為128 字節(jié)。并且具備對調(diào)制解調(diào)器的控制功能。
并行I/O 接口由2 片8255 可編程并行接口芯片組成,每片8255 芯片有3 個8 位的雙向并行I/O 端口,分別為A 口、B 口、C 口。8255 芯片可工作于方式0(基本輸入輸出方式)、方式1(選通輸入輸出方式)、方式2(雙向總線方式)。
串口調(diào)試系統(tǒng)軟件是以VxWorks 操作系統(tǒng)、支撐軟件、驅(qū)動程序為基礎(chǔ)開發(fā)的應(yīng)用軟件,使用Tornado2.2 基于PC 平臺及Windows 操作系統(tǒng)開發(fā)。Tornado 是VxWorks 操作系統(tǒng)下的集成開發(fā)環(huán)境,它包含了一套完整的面向嵌入式系統(tǒng)的開發(fā)調(diào)試工具,集成了設(shè)計、開發(fā)、分析等功能,提供了嵌入式實時應(yīng)用程序開發(fā)的一種有效方式:串口調(diào)試系統(tǒng)應(yīng)用程序在Windows 環(huán)境下編譯生成可執(zhí)行文件,將可執(zhí)行文件導(dǎo)入目標系統(tǒng),通過本地主機上的服務(wù)器(Target Server)與目標系統(tǒng)的目標代理(Target Agent)的通信完成對串口調(diào)試系統(tǒng)應(yīng)用程序的調(diào)試和分析。
串口調(diào)試系統(tǒng)軟件運行于VxWorks5.5 操作系統(tǒng),提供友好、完整的人機交互界面,如圖3所示。界面頂部為串口參數(shù)設(shè)置區(qū)域,可完成對串口號、波特率、校驗位、數(shù)據(jù)位、停止位的設(shè)置及串口的開啟關(guān)閉操作;界面中部為接收數(shù)據(jù)顯示區(qū)域,可完成串口數(shù)據(jù)實時顯示及顯示方式的控制;界面底部為串口數(shù)據(jù)發(fā)送區(qū)域,可完成串口發(fā)送數(shù)據(jù)的輸入及發(fā)送方式的控制。
本軟件采用模塊化設(shè)計思想,將軟件分為主控模塊、串口通訊模塊、顯示控制模塊。各軟件模塊間接口關(guān)系如圖4所示。軟件數(shù)據(jù)處理流程圖如圖5所示。
主控模塊是串口調(diào)試系統(tǒng)軟件的控制中心,主要完成初始化串口調(diào)試系統(tǒng)內(nèi)的軟硬件資源、創(chuàng)建并啟動各任務(wù)和消息隊列、對其他模塊的調(diào)用、顯示初始畫面。當串口調(diào)試系統(tǒng)軟件啟動時自動加載主控模塊。通過taskSpawn 函數(shù)創(chuàng)建任務(wù),通過msgQCreate 函數(shù)創(chuàng)建消息隊列,通過msgQSend 和msgQReceive 完成消息的發(fā)送和接收,通過open 和close 函數(shù)完成串口的開啟和關(guān)閉,通過ioctl函數(shù)實現(xiàn)串口的參數(shù)設(shè)置。示例代碼如下:
串口通訊模塊完成與外部待調(diào)試設(shè)備間的串口數(shù)據(jù)交互。在軟件啟動時,創(chuàng)建并激活串口發(fā)送、接收任務(wù)后,串口發(fā)送、接收程序被調(diào)用。串口接收任務(wù)定時查詢串口接收緩沖區(qū),若有數(shù)據(jù)就取出并處理;串口發(fā)送任務(wù)定時查詢是否接收到串口數(shù)據(jù)發(fā)送消息,若接收到消息就拼裝相應(yīng)數(shù)據(jù)報文向外送出。通過select 函數(shù)監(jiān)聽串口的可讀事件,如果可讀,則調(diào)用read 函數(shù)讀取串口數(shù)據(jù)。通過調(diào)用write 函數(shù)發(fā)送串口數(shù)據(jù)。主要示例代碼如下:
顯示控制模塊主要完成串口調(diào)試系統(tǒng)的界面顯示、控制與處理功能,完成用戶對系統(tǒng)的控制和輸入。包括接收數(shù)據(jù)的顯示、工作參數(shù)的設(shè)置、顯示界面的控制和發(fā)送數(shù)據(jù)的輸入。
顯示控制模塊的開發(fā)采用了VxWorks 下基于窗口管理及可視化控件的圖形開發(fā)工具EGK。EGK 是一種應(yīng)用于嵌入式系統(tǒng)跨平臺的圖形界面設(shè)計工具,包含了人機界面設(shè)計中需要的基本窗口和控件,用戶可以根據(jù)實際需求對窗口及控件類進行重寫。本文根據(jù)串口調(diào)試系統(tǒng)界面顯示的內(nèi)容和特點,主要用到了以下4 個類:全局類Egk、窗口類Egk_Window、控件組類Egk_Group 和控件基類Egk_Widget。
界面中的按鈕采用了Egk_Button 控件,通過callback 函數(shù)將按鈕與回調(diào)函數(shù)關(guān)聯(lián),當調(diào)試人員點擊按鈕時自動調(diào)用回調(diào)函數(shù),示例代碼如下:
接收數(shù)據(jù)顯示區(qū)域采用繼承Egk_Box 的自定義控件,默認16進制顯示,一行最多顯示32 個數(shù)據(jù)。通過自定義函數(shù)SetInfo 和draw 更新數(shù)據(jù)繪制控件,通過redraw 函數(shù)刷新界面顯示。界面顯示的控制包括開啟、停止數(shù)據(jù)接收顯示和清空界面顯示。當調(diào)試人員點擊“停止接收”按鈕時軟件停止接收處理串口數(shù)據(jù),界面不再刷新顯示;當點擊“開始接收”按鈕時,軟件重新接收并處理顯示串口數(shù)據(jù);當點擊“清空顯示”按鈕時清空界面數(shù)據(jù)顯示。
工作參數(shù)菜單采用Egk_Choice 控件,通過menu 完成菜單內(nèi)容的加載,通過value 取值。參數(shù)設(shè)置包括對串口號、波特率、校驗位、數(shù)據(jù)位、停止位的設(shè)置。其中,串口號設(shè)置可內(nèi)容為:com1、com2、com3、com4;波特率可設(shè)置內(nèi)容為:300、600、1200、2400、4800、9600、19200、38400、43000、56000、115200;校驗位可設(shè)置內(nèi)容為:無校驗、奇校驗、偶校驗;數(shù)據(jù)位設(shè)置可設(shè)置內(nèi)容為8、7、6;停止位可設(shè)置內(nèi)容為:1、2。
發(fā)送數(shù)據(jù)的控制包括自動發(fā)送、發(fā)送周期的設(shè)置及數(shù)據(jù)內(nèi)容的輸入。自動發(fā)送的控制采用Egk_Check_Button 控件,通過value 函數(shù)讀取控件值,當此控件被勾選時,串口數(shù)據(jù)發(fā)送方式為周期性自動發(fā)送,否則為手動發(fā)送。發(fā)送周期及數(shù)據(jù)內(nèi)容的輸入框采用Egk_Input 控件,通過value 函數(shù)讀取輸入值。
本文詳細介紹了實時操作系統(tǒng)VxWorks 中串口調(diào)試系統(tǒng)的設(shè)計和實現(xiàn)方法,克服了VxWorks 系統(tǒng)下串口調(diào)試手段的局限性,憑借VxWorks 操作系統(tǒng)優(yōu)異的實時性、可靠性,提高了串口通信調(diào)試的能力。該方法可適用于工業(yè)控制、自動化等多個方面,具有一定的工程應(yīng)用價值。