?

基于VxWorks的BMK卡的軟件測試系統研究

2014-09-26 03:48王煊
電子設計工程 2014年2期
關鍵詞:服務程序驅動程序中斷

王煊

(中國空空導彈研究院 河南 洛陽 471009)

首先,本文詳細探討了基于VxWorks的PXI板卡驅動程序的開發,總結出PXI驅動開發的具體流程,闡述了驅動程序中各功能模塊的實現方法和技術要點,完成了BMK卡在VxWorks系統下的驅動程序開發與調試工作,尤其是DMA數據傳輸部分的實現,填補了國防型號測試系統中的空白,滿足了研制的急需性。其次,論文重點說明了系統應用程序的設計,實現了VxWorks端與Windows端跨平臺的通信,分別詳細說明了客戶端和服務端的網絡通信程序的設計與實現,為嵌入式軟件的遠程控制奠定了基礎。最后給出了接口函數的列表,完成了整個系統的設計。

1 PXI總線BMK卡概述

基于PXI總線的BMK卡是空空導彈測試系統的重要組成部分,在遙測接收計算機上發揮重要作用。遙測計算機包括:6槽PXI機箱,PXI嵌入式控制器——PXI3800以及相應的PXI總線接口功能子單元和信號調理硬件。整體結構如圖1。

本文所涉及的BMK卡測試系統是在VxWorks實時控制系統下設計的BMK的驅動,實時性較好,為微秒級,對研發高實時性系統奠定重要基礎。此外在Windows系統下實現了用戶界面的開發,人機交互界面良好。結構圖如圖2。

圖1 遙測接收計算機框架圖Fig.1 The telemetry receiving computer framework figure

圖2 BMK卡測試程序結構圖Fig.2 BMK card test program design chart

2 VxWorks下設備驅動程序研究與實現

VxWorks系統中輸入輸出設備宏觀上被分為3種類型:字符設備、塊設備和網絡設備[2]。這種分類方法是根據硬件本身的特性來決定的。依照設備類型,VxWorks下設備驅動程序的管理也被分為3種模塊:字符設備驅動程序模塊、塊設備驅動程序模塊、網絡設備驅動程序模塊。每個模塊對應一種設備類型,而每個模塊中不同的設備包含的功能不一樣。用戶可以根據自己的需要在VxWorks下,創建不同的模塊。

BMK卡為PXI設備,屬于網絡設備,其驅動程序應創建為網路設備驅動程序。

2.1 初始化模塊

系統加電以后,加載VxWorks映像。然后處理器跳到加載映像的地址即 sysInit()的首地址開始執行,sysInit()完成最初的硬件初始化工作。再調用第二個子程序UserInit()來關閉所有硬件中斷[5]。 其中 UserInit()的子程序 sysHInit()將硬件處于初始的安靜狀態,此時VxWorks系統內核還沒有被激活,內存也沒有被初始化。

主要工作如下:在config.h中定義INCLUDE_PCI,設置PCI_CFG_TYPE為PCI_CFG_NONE讓BIOS來完成硬件資源配置;sysHWInit()做動態配置調用 sysPlx9054PciInit()查找設備和動態配置設備[1]。

2)重視項目化的過程考核。傳統的高職大學英語課堂上,學生普遍認為只要期末根據教師所給定的復習重點臨時抱抱佛腳,就能應付期末考試。而對于英語學習來說,在期末英語考試中,考試內容只有一小部分的聽力考試,其余都是筆試,不能全面反映學生在一個學期內的學習成果。因此,在英語考試方面應當增加考試內容,將學習的過程納入英語期末考評中,增加其占考評的比重。在核心素養培養下的英語課程考核應當包括對學生語言能力、學習能力、思維能力和文化意識方面的考核。

PXI3800的BSP對專門的PCI設備提供了支持,BMKCardInit()函數就是通過調用這些庫函數來完成硬件搜索和資源配置功能的。

2.2 中斷處理

對于中斷,首先要進行中斷掛接,其次進行中斷處理模塊。

中斷掛接是在系統內核被激活后才被調用的,其主要工作是初始化DMA相關寄存器,為進行DMA操作做準備;掛接中斷,將中斷向量和中斷服務程序相關聯,并使能中斷;創建互斥信號量,用于建立驅動程序和應用程序之間的特殊通信[3]。

一般情況PCI設備會共享中斷,所以掛接要使用pciIntConnect來將所有共享中斷的中斷服務程序組成一個函數鏈,這樣每次發生中斷都會將這個鏈調用一遍,從而實現中斷共享。

接收中斷后進入中斷處理模塊。中斷處理模塊的主要工作是中斷到來時判斷是否為自己控制的設備發生的中斷,是則繼續處理,否則立即返回,交由其他中斷服務程序處理。若為DMA0通道產生的中斷,則釋放互斥信號量通知應用程序處理剛通過DMA方式存入內存的數據;最后清中斷。

由于所有的中斷服務例程共享一個堆棧,沒有任務控制模塊,所以,在中斷服務程序中不能使用可導致阻塞的函數,如 printf()、semTake()等。 另外,中斷服務程序不允許使用浮點協處理器的函數,因為在 VxWorks中,intConnect()建立的中斷服務程序不能保存并回復浮點寄存器,如果一定要在中斷服務程序中使用浮點運算的話,必須使用fppArchLib庫中的函數顯式的保存和恢復浮點協處理器寄存器。

3 網絡通信程序設計與實現

在VxWorks的BSP完成了網口的底層驅動和TCP/IP層上的協議加載后,用戶程序需要的就是在TCP/IP層上進行網絡通信。在本系統中,采用的是服務器 (server)和客戶端(client)的通信方式。其實現過程如圖3所示。

圖3 服務器端與客戶端的建立Fig.3 Socket connecting between server and client

3.1 VxWorks端網絡通信程序設計

在服務器端,在Tornado2.2中利用VxWorks對socket的支持,其通信程序如下[4]:

1)創建套接字。創建 socket是利用函數 socket(AF_INET,SOCK_STREAM,0), 其 中 ,AF_INET 指 定 通 信 域 為TCP/IP協議簇,SOCK_STREAM是全雙工的字節流。Socket調用成功后返回一個套接字描述符,接著對服務器地址等數據結構初始化并對字節順序進行初始化。

2)bind (listenSkt, (struct sockaddr*) &serverAddr, sock AddrSize),將套接字口和端口號綁定在一起。

3)監聽。函數 listen (listenSkt, 5)將在 listenSkt套接字指定的端口上開始監聽,等待客戶的連接請求。

4)建立連接。 函數 accept(listenSkt, (struct sockaddr*)(&clientAddr),&sockAddrSize)接收客戶機的連接請求并為此建立一個連接。函數accept返回一個新的套接字描述符commuSkt來供連接使用,服務器可以在以前的socket上繼續監聽。

5)關閉連接。用函數close()來關閉一個套接字描述符。

6)發送和接收數據。函數send()用于從發送緩沖區讀取指定字節長度的數據來發送。函數recv()從接收緩沖區接收指定字節長度的數據。

整個程序的運行,需要多任務的支持。在多任務操作系統VxWorks下,任務由唯一的ID來標識,并且對應某一個特定的任務名,系統支持256個優先級。在默認情況下,0為最高優先級,255為最低優先級。每個任務都有自己的狀態,是下面一種或幾種的組合狀態:excute(正在執行),ready(就緒狀態),pended(阻塞狀態),delayed(延遲狀態),suspended(掛起狀態)。本系統中采用了默認的優先級搶占調度策略。

3.2 windows端通信程序的設計

Windows端通信程序是基于Windows socket的,windows socket定義了一套Microsoft Windows下網絡編程接口。它提供了針對Windows的擴展函數庫,使程序員可以充分的利用Windows消息驅動機制進行編程。

Windows socket通信的基礎是套接字 (socket)。 利用socket進行通信,主要有兩種方式。第一種是有連接的流方式,即需要在兩個通信的應用程序之間建立一條連接鏈路。必須在兩端確定通路后,數據才能被正確接收和發送。第二種是無連接的數據報文方式,這時通信的兩臺計算機把數據通過網絡郵寄給對方,數據在傳送過程中有可能會殘缺,也有可能接收順序與發出時順序不同,這種方式支持雙向的數據流,但并不保證數據的可靠、有序、無重復性。在本系統中采用的是有連接的流方式,用的是客戶機/服務器模型。

對于VxWorks端來說,Windows屬于客戶機,客戶機的界面用MFC進行編寫,通過界面向服務器請求服務,并通過一套協議保證服務可以被提供或者接收,該協議需要被客戶機和服務器所接受。在MFC中為套接字提供了類CAsyncSocket和 CSocket,由于CAsyncSocket不需要多線程,使用簡單,雖然CAsyncSocket的發送和接收受到TCP/IP緩沖大小的限制,但是Windows作為上層界面控制的時候,數據量并不大,所以在本系統中采用CAsyncSocket類庫中的函數。

創建函數:BOOL Create(UINT nSocketPort=0,int nSocketType=SOCK_STREAM,long lEvent=FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE,LPCTSTR lpszSocketAddress=NULL)

關 聯 函 數 :BOOL Bind ( UINT nSocketPort, LPCTSTR lpszSocketAddress=NULL)

客戶套接字連接函數:BOOL Connect(LPCTSTR lpszHostAddress, UINT nHostPort)

4 接口函數設計

接口函數包括發送例程和接收例程。

發送例程的設計分為以下幾步:

1)應用程序把要發送的數據的緩沖區首指針和發送要求傳遞給驅動程序,發送要求包括通道號,發送方式,發送個數。

2)驅動程序將發送要求寫入對應的寄存器地址。寫發送命令字,然后請求獲得該發送通道以及發送方式對應的發送緩沖區的信號量。若信號量獲得成功,驅動程序就把將要發送的數據通過DMA傳輸的方式寫入發送緩沖區;若信號量獲得不成功,多請求幾次,超過一次次數后函數返回,發送失敗。對于單次發送的方式必須首先查詢一個特定的標志位,該標志位表示的是發送是否準備好,只有查詢到該標志位為0,才可以進行后面的操作。

相對于發送例程來說,接收例程要復雜一些[6]。

圖4 接收例程流程圖Fig.4 Receive routine flowchart

這里涉及到了兩個任務的同步以及任務間的通信,采用了信號量的方式進行處理。VxWorks為信號量做了很好的優化,為任務間通信提供了最快捷的方式。信號量是互斥和任務同步的主要實現手段。

二進制信號量是速度最快、真正意義上的信號量。VxWorks專門為任務同步和互斥優化了這種信號量,這種信號量相當于總數為1的計數型信號量,也可以理解成一種開關。一個信號量只有唯一的任務可以獲得,當一個任務釋放信號量之后,其他的任務才可以重新獲得這個信號量。

BMK的接口函數如下:

表1 BMK通信卡接口函數表Tab.1 BMK card interface functions list

5 結 論

本文設計了基于PXI總線的BMK卡的軟件測試程序,該程序結構緊湊,功能齊全,并且在實時性系統VxWorks的操作下,確保了數據處理的迅速準確。該板卡工作穩定,可以實現收發數據,尤其在DMA傳輸過程中,保證了大量數據發送的及時性,適用于高實時性要求的系統。在國防中可以發揮重要作用。

[1]9054 Data Book Version 2.1,PCI 9054 Data Book[S].U.S:PLX,2000.

[2]Barbalance A.Performance Comparison of VxWorks, Linux,RTAI and Xenomai in a Hard Realctime Application[C]//Real-Time Conference,2007.

[3]卞紅雨,曹明明.VxWorks下 PCI總線設備驅動程序設計[J].聲學與電子工程,2005(3):42-45.

BIAN Hong-yu,CAO Ming-ming.PCI device driver design on VxWorks[J].Acoustics and Electronics Engineering,2005(3):42-45.

[4]程敬原.VxWorks軟件開發項目實例[M].北京:中國電力出版社,2005:24-64.

[5]CHENG Jing-yuan,AN Qi,YANG Jun-feng.Algorithm design ofCPCIbackboard’sinterruptsmanagementbased on VxWorks’ multi-tasks[J].Plasma Science and Technology,2006,V8(5):614-617.

[6]孔祥營,柏桂枝.嵌入式實時操作系統VxWorks及其開發環境Tornado[M].北京:中國電力出版社,2002:114-116.

猜你喜歡
服務程序驅動程序中斷
SylixOS系統的中斷嵌套機制研究與實現
基于C#的進程守護程序的設計
UDP穿透NAT技術實現數據喚醒車聯網T-Box設備的方案
基于FPGA的中斷控制器設計*
計算機硬件設備驅動程序分析
跟蹤導練(二)(5)
千里移防,衛勤保障不中斷
水利工程施工監理服務程序及質量控制
基于MPC8280的CPU單元與內部總線驅動程序設計
FPGA內嵌PowerPC的中斷響應分析
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合