雷 瑛 劉亙煒 張 安 張 磊
(西安電子工程研究所 西安 710100)
VxWorks是一個具有微內核、可裁剪的高性能強實時操作系統,它以其良好的可靠性和卓越的實時性被廣泛地應用在工業控制、醫療器械、航空航天以及國防電子等高精尖技術及實時性要求極高的領域中[1]。相對于RS-232串口,RS-422串口具有抗干擾能力強、通訊速率高、通訊距離遠等特點,在嵌入式實時操作系統中使用串口通信,不僅可擴展嵌入式設備通信能力,而且可擴大其應用范圍。
VxWorks是美國Wind River System公司推出的一個嵌入式實時操作系統,主要特點有:
a.微內核Wind具有快速多任務切換、搶占式任務調度、中斷延遲小、任務間通信手段多樣化、網絡流量大等特點。b.VxWorks系統具有良好的可裁減能力,用戶可根據自己系統的功能目標通過交叉開發環境方便地設置。c.支持應用程序的動態鏈接和下載,縮短了編輯和調試的周期。d.具有良好的兼容性,在不同運行環境間可以方便的移植,減少了開發周期和經費。
某多功能雷達為有效適應復雜作戰任務和戰場環境,多個分系統之間均有數據量較大的實時通訊,并要求響應時間快,處理迅速。系統硬件設計選用定制方式將計算機模塊和大規模可編程器件FPGA作在一塊印制板上,采用F81218多串口芯片擴展了6個標準RS422串口,將2個計算機自帶的可設串口也設為標準RS422串口,系統硬件原理圖如圖1所示。軟件采用VxWorks 5.5開發,能很好地解決以上問題。

圖1 系統硬件原理圖
VxWorks 5.5附帶的BSP版本為1.2.3,該版本BSP已經內置串行通訊接口的驅動,但是默認僅能驅動大多數主板附帶的COM1和COM2兩個串口,為了滿足該項目應用需求,需要修改BSP,以添加對COM3~COM8串行接口的驅動支持,修改如下:
a.在VxWorks內核組件中加入hardware→periphe→serial中所有組件;
b.在BSP文件夾pc.h文件里加入8個串口對應地址:

添加串口中斷號定義,其中COM3~COM8共享5號中斷:


c.在 sysSerial.c文件的表 I8250-CHAN-PARAS devParas[]中加入對新添加串口設備的映射:

添加中斷服務程序對共享中斷的處理[2]:


若以上添加成功,在 VxWorks啟動后可以用devs命令查詢到新添加的串行設備。
VxWorks對于串口的操作是通過I/O系統提供的 create、open、read、write、close、delete、ioctl等控制接口實現,分別完成串口創建、串口打開、讀串口、寫串口、關閉串口、刪除串口,串口設置等操作[3]。串口基類完成對串口基本參數的設置及工作流程的構建,各個子類與基類不同的處理過程通過純虛函數重載來添加。根據不同標志(FLAG),轉入相應的串口子類程序。系統軟件模塊圖如圖2所示。

圖2 系統軟件模塊圖
串口通信協議如下所示:

在基類中完成對所有串口基本工作參數如工作模式、設備控制字、輸入輸出緩沖區等的設置,程序舉例如下[4]:

在基類中定義串口收數任務(任務1)和串口數據處理任務(任務2)。串口收數任務實時監測串口是否有數據到來,一旦監測到有數據則全部讀取并交由數據封包函數按照通訊協議根據字頭、數據長度打包;數據封包函數一旦收滿一包數則釋放信號量通知串口數據處理任務。串口數據處理任務一旦獲取信號量則根據FLAG不同轉入相應的串口子類數據解析函數根據數據類型的不同進行相應的處理,程序舉例如下:

將傳進來的數據寫入相應的串口,程序舉例如下:


在串口子類構造函數中定義FLAG的具體值;在子類重載函數Open()中調用基類串口初始化函數重新定義該串口特有的一些工作參數;在子類重載函數parse(const BYTE* pBYTE,const int size)中對傳進來封好包的數據進行進一步解析,根據數據類型的不同轉到相應的處理函數進行處理。Open()和 parse(const BYTE* pBYTE,const int size)在基類中設置為可重載的純虛函數,程序舉例如下:


本文描述了在實時操作系統VxWorks中對多串口系統實現數據通信的方法,并給出了示例程序,該方法適用于工業控制等多方面。VxWorks以其優異的實時性和可靠性,增強了了串口通信能力,并且擴大了其應用范圍,能適應數據量大,多任務、多響應、實時性要求高的環境。
[1]徐惠民.基于VxWorks的嵌入式系統及實驗[M].北京:北京郵電大學出版社,2006.
[2]孔祥營,張保山,俞烈彬.VxWorks驅動及分布式編程[M].北京:中國電力出版社,2007.
[3]張楊,于銀濤.VxWorks內核、設備驅動與BSP開發詳解[M].北京:人民郵電出版社,2009.
[4]孟英謙,王玲.嵌入式VxWorks實時操作系統中串口通信的實現[J].軟件技術,2003(1):52~54.