雷 瑛 劉亙煒 張 安 張 磊
(西安電子工程研究所 西安 710100)
VxWorks是一個具有微內(nèi)核、可裁剪的高性能強實時操作系統(tǒng),它以其良好的可靠性和卓越的實時性被廣泛地應用在工業(yè)控制、醫(yī)療器械、航空航天以及國防電子等高精尖技術(shù)及實時性要求極高的領域中[1]。相對于RS-232串口,RS-422串口具有抗干擾能力強、通訊速率高、通訊距離遠等特點,在嵌入式實時操作系統(tǒng)中使用串口通信,不僅可擴展嵌入式設備通信能力,而且可擴大其應用范圍。
VxWorks是美國Wind River System公司推出的一個嵌入式實時操作系統(tǒng),主要特點有:
a.微內(nèi)核Wind具有快速多任務切換、搶占式任務調(diào)度、中斷延遲小、任務間通信手段多樣化、網(wǎng)絡流量大等特點。b.VxWorks系統(tǒng)具有良好的可裁減能力,用戶可根據(jù)自己系統(tǒng)的功能目標通過交叉開發(fā)環(huán)境方便地設置。c.支持應用程序的動態(tài)鏈接和下載,縮短了編輯和調(diào)試的周期。d.具有良好的兼容性,在不同運行環(huán)境間可以方便的移植,減少了開發(fā)周期和經(jīng)費。
某多功能雷達為有效適應復雜作戰(zhàn)任務和戰(zhàn)場環(huán)境,多個分系統(tǒng)之間均有數(shù)據(jù)量較大的實時通訊,并要求響應時間快,處理迅速。系統(tǒng)硬件設計選用定制方式將計算機模塊和大規(guī)??删幊唐骷﨔PGA作在一塊印制板上,采用F81218多串口芯片擴展了6個標準RS422串口,將2個計算機自帶的可設串口也設為標準RS422串口,系統(tǒng)硬件原理圖如圖1所示。軟件采用VxWorks 5.5開發(fā),能很好地解決以上問題。
圖1 系統(tǒng)硬件原理圖
VxWorks 5.5附帶的BSP版本為1.2.3,該版本BSP已經(jīng)內(nèi)置串行通訊接口的驅(qū)動,但是默認僅能驅(qū)動大多數(shù)主板附帶的COM1和COM2兩個串口,為了滿足該項目應用需求,需要修改BSP,以添加對COM3~COM8串行接口的驅(qū)動支持,修改如下:
a.在VxWorks內(nèi)核組件中加入hardware→periphe→serial中所有組件;
b.在BSP文件夾pc.h文件里加入8個串口對應地址:
添加串口中斷號定義,其中COM3~COM8共享5號中斷:
c.在 sysSerial.c文件的表 I8250-CHAN-PARAS devParas[]中加入對新添加串口設備的映射:
添加中斷服務程序?qū)蚕碇袛嗟奶幚韀2]:
若以上添加成功,在 VxWorks啟動后可以用devs命令查詢到新添加的串行設備。
VxWorks對于串口的操作是通過I/O系統(tǒng)提供的 create、open、read、write、close、delete、ioctl等控制接口實現(xiàn),分別完成串口創(chuàng)建、串口打開、讀串口、寫串口、關閉串口、刪除串口,串口設置等操作[3]。串口基類完成對串口基本參數(shù)的設置及工作流程的構(gòu)建,各個子類與基類不同的處理過程通過純虛函數(shù)重載來添加。根據(jù)不同標志(FLAG),轉(zhuǎn)入相應的串口子類程序。系統(tǒng)軟件模塊圖如圖2所示。
圖2 系統(tǒng)軟件模塊圖
串口通信協(xié)議如下所示:
在基類中完成對所有串口基本工作參數(shù)如工作模式、設備控制字、輸入輸出緩沖區(qū)等的設置,程序舉例如下[4]:
在基類中定義串口收數(shù)任務(任務1)和串口數(shù)據(jù)處理任務(任務2)。串口收數(shù)任務實時監(jiān)測串口是否有數(shù)據(jù)到來,一旦監(jiān)測到有數(shù)據(jù)則全部讀取并交由數(shù)據(jù)封包函數(shù)按照通訊協(xié)議根據(jù)字頭、數(shù)據(jù)長度打包;數(shù)據(jù)封包函數(shù)一旦收滿一包數(shù)則釋放信號量通知串口數(shù)據(jù)處理任務。串口數(shù)據(jù)處理任務一旦獲取信號量則根據(jù)FLAG不同轉(zhuǎn)入相應的串口子類數(shù)據(jù)解析函數(shù)根據(jù)數(shù)據(jù)類型的不同進行相應的處理,程序舉例如下:
將傳進來的數(shù)據(jù)寫入相應的串口,程序舉例如下:
在串口子類構(gòu)造函數(shù)中定義FLAG的具體值;在子類重載函數(shù)Open()中調(diào)用基類串口初始化函數(shù)重新定義該串口特有的一些工作參數(shù);在子類重載函數(shù)parse(const BYTE* pBYTE,const int size)中對傳進來封好包的數(shù)據(jù)進行進一步解析,根據(jù)數(shù)據(jù)類型的不同轉(zhuǎn)到相應的處理函數(shù)進行處理。Open()和 parse(const BYTE* pBYTE,const int size)在基類中設置為可重載的純虛函數(shù),程序舉例如下:
本文描述了在實時操作系統(tǒng)VxWorks中對多串口系統(tǒng)實現(xiàn)數(shù)據(jù)通信的方法,并給出了示例程序,該方法適用于工業(yè)控制等多方面。VxWorks以其優(yōu)異的實時性和可靠性,增強了了串口通信能力,并且擴大了其應用范圍,能適應數(shù)據(jù)量大,多任務、多響應、實時性要求高的環(huán)境。
[1]徐惠民.基于VxWorks的嵌入式系統(tǒng)及實驗[M].北京:北京郵電大學出版社,2006.
[2]孔祥營,張保山,俞烈彬.VxWorks驅(qū)動及分布式編程[M].北京:中國電力出版社,2007.
[3]張楊,于銀濤.VxWorks內(nèi)核、設備驅(qū)動與BSP開發(fā)詳解[M].北京:人民郵電出版社,2009.
[4]孟英謙,王玲.嵌入式VxWorks實時操作系統(tǒng)中串口通信的實現(xiàn)[J].軟件技術(shù),2003(1):52~54.