摘 要:數字式聲納系統需要實時顯示其搜索、跟蹤結果,同時對用戶命令作出及時的響應,并實時控制前端的硬件。本文基于VxWorks實時操作系統和X窗口系統的顯示及控制程序設計,著重介紹實時多任務程序設計。
關鍵詞:實時 實時操作系統 VxWorks X\ Window
系統概況
本系統運行于VME總線系統(MVME177)上,通過VME背板總線與各模件交換數據對各處理模件進行控制并顯示信號處理結果。MVME177模件運行于嵌入式實時操作系統VxWorks下,人機交互界面基于X窗口系統。
一、 嵌入式實時操作系統VxWorks簡介
由于聲納系統在探測到某些目標(如魚雷)后要迅速作出反應,所以要求控制及顯示系統必須是實時操作系統。實時操作系統要求能夠隨時打斷正在執行的任務,對內部和外部發生的事件在確定的時間內作出響應。本系統采用的VxWorks 是由美國WindRiver開發的一種類UNIX的高性能嵌入式實時操作系統。它是目前世界上用戶數量的實時操作系統,具有優越的技術性能、豐富的應用軟件支持、良好的技術服務和可靠的系統穩定性。
VxWorks的主要性能特點有:
(1) 高度可剪裁的微內核結構。VxWorks所需要的存儲器空間大約為8KB~488KB(ROM)、620KB~29.3KB(RAM),具有極好的可伸縮性。
(2) 高效的多任務調度。VxWorks 支持中斷驅動的優先級搶占式調度和時間片輪轉調度,并具有確定的、快速的上下文切換能力。
(3) 靈活的任務間通信手段。支持信號燈、消息隊列、管道、信號和套接字等進程間通信和互斥手段。
(4) 支持諸如Ring buffer、Link list 等共享內存技術。
(5) 確定的μs級的中斷延遲時間。
(6) 適用于多種物理介質的TCP/IP協議族支持和幾乎所有常用的基于TCP/IP協議的應用層協議。
(7) 極其豐富的板級支持軟件包(BSP),支持多種處理器板。
(8) 支持POSIX 1003.1b (實時擴充)。
(9) 快速、靈活的I/O系統。
(10) 支持MS\ DOS、RT\ 11和RAW等文件系統和網絡文件系統(NFS)。
(11) 靈活的啟動方法。支持從ROM、本地磁盤以及網絡啟動。
二、 VxWorks的一些技術特點
VxWorks的特點主要在于嵌入式和實時性。由于嵌入式的特點,系統內核只有任務管理和簡單的內存管理,在此之上可以根據需要配置各種功能模塊,包括網絡管理、文件系統、虛擬存儲器等等。實時性則體現在實時調度算法和實時內核(高效的進程間通信、內存管理等)。
VxWorks支持POSIX標準,所以POSIX的概念和接口以及一些策略都被支持。但為了提高系統性能,VxWorks另有一套接口及實現策略稱為wind內核。下面的討論主要針對wind內核。POSIX標準可以參見相關資料。
(1) 任務 在VxWorks中,小的程序運行單位稱為任務(task)。每個任務包含一段固定的代碼和數據空間。操作系統內核通過任務控制塊(task control block)對它的執行、通信、資源等情況進行控制。任務具有就緒、阻塞、掛起和延遲等狀態。
與Linux和WindowsNT下的進程不同的是:在VxWorks中,所有任務共同享有物理內存,存在于統一的線性空間中。每個任務沒有自己獨立的代碼段和堆,只有獨立的動態棧。任務中的地址即是真正的物理地址。由于不需要進行地址空間映射,在任務切換時的上下文切換(context switch)時間大為減少,符合實時操作系統要求快速響應的原則。從這個意義上來說,VxWorks的任務更接近Linux和WindowsNT下的線程(thread)。 VxWorks的代碼段與堆共享減少了上下文切換時間,卻帶來了共享代碼的可重入性(reentrancy)問題。如1個函數被2個任務所調用,當其中包含對全局、靜態變量等從堆中分配空間的數據進行訪問時,就有可能產生沖突,從而引發錯誤。在應用軟件開發時要加以注意。解決方法是使用局部變量(從棧中分配空間)或使用信號燈對臨界代碼進行監控。
(2) 任務調度 VxWorks有2種任務調度策略:優先級搶先調度和時間片輪轉調度。這2種調度策略都是系統級的,與POSIX進程級的調度策略不同,即整個系統里要么是優先級搶先調度,要么是時間片輪轉調度;而POSIX標準下可以每個進程使用自己的調度策略。系統共有256個優先級。
優先級搶先調度指的是一個優先級較低的任務正在執行中,另一個優先級高的任務進入就緒狀態,則馬上進行處理器搶先,執行高優先級任務,直到高優先級釋放處理器(完成、掛起、阻塞等)才繼續執行低優先級任務。
優先級搶先調度可以保證實時系統的迅速響應特性,但是也帶來1個問題:當系統中存在幾個相同優先級的任務時,就會使單一任務獨占處理器,直至完成。為此加入了基于優先級的時間片輪轉調度方式。在不同優先級的任務間以搶先方式調度,相同優先級的任務則以時間片進行輪轉。
(3) 存儲管理 在基本的wind內核中,任務直接操作線性物理內存,不存在虛擬存儲等復雜的存儲管理策略,這主要是從性能來考慮的。不過VxWorks也提供支持POSIX標準的虛擬存儲區和共享內存(多處理器間共享)組件。
(4) 任務間通信 在任務間傳遞控制信息時,通信量小,wind內核支持各種UNIX的通信手段:信號量(semaphore)、消息隊列(message queue)、管道(pipe)、信號(signal)、套接字(socket)。信號量主要用于對臨界資源訪問的同步和互斥;消息隊列多用于消息驅動機制;管道是基于文件系統實現的任務間按先進先出方式傳送數據的通信方式;信號相當于軟中斷;套接字機制主要用于網絡通信。
當任務間需要大量交換數據時,由于VxWorks直接操作物理內存,可以直接訪問全局存儲區,不需要特別的手段,與Linux下的共享存儲段申請和WindowsNT中的存儲映射文件方式不同。
(5) 中斷 在VxWorks下,所有中斷服務程序都不屬于任何一個任務,并且使用同一個棧進行數據存儲,則中斷將不會引起上下文切換,以實現高效的中斷響應。中斷與各任務之間可以通過前面所述的各種手段進行通信,但要注意對中斷服務程序有一些限制,例如不能進行可能導致阻塞的資源申請等等。
(6) 文件系統 VxWorks支持多種本地文件系統:MS_DosFS、RawFS和RT\ 11FS,可根據具體配置選擇;還支持網絡文件系統NFS,可以沒有局域文件系統。
(7) 網絡支持 Vxworks支持多種物理介質的TCP/IP協議族和幾乎所有常用的基于TCP/IP協議的應用層協議,例如ARP、BOOTP、SLIP和FTP,甚至其啟動就是通過BOOTP或FTP方式取得系統映像文件的。 以上簡單介紹了一些VxWorks的技術特點。要注意,這些特點都是跟VxWorks的特性——實時性與嵌入式密切相關的。
三、 X窗口系統
本系統采用美國Peritek公司的VCL\ V圖形控制器插件進行顯示輸出和輸入控制,客戶界面基于X\ Window。X客戶程序的開發選用美國SeaWeed公司的SeaWindM軟件。
X是美國麻省理工學院(MIT)研制的一個可移植的網絡透明的窗口系統。它具有設備獨立性和網絡透明性的特點,即基于X開發的應用程序不需要重寫或重新編譯就可以在新的顯示硬件上執行,并且在網絡環境下通過X可在網絡任一節點上運行X的應用程序而不必考慮該節點的物理位置。
四、 顯示與控制系統的具體實現
本系統的功能主要是初始化各處理模件、根據輸入命令對各處理模件進行控制和對處理結果的實時顯示。這些都是通過與相應子系統的數據通信來完成的。對通信數據和策略的分析是系統設計的關鍵。系統與其他子系統中存在著這樣幾類通信數據:與前端模擬子系統的控制信息與數據、與數字信號處理子系統相關的控制信息和數據、發射信號控制信息、顯示數據以及從鍵盤和鼠標獲得的輸入信息。這幾類數據都是通過VME背板總線傳輸,通過對VME地址空間直接讀寫進行訪問。其中由數字信號處理子系統送來的數據是由數據更新事件驅動的。為了滿足實時性的要求,需要在每組結果數據更新之前完成通信,因此處理的優先級需要很高。
基于上面的考慮,系統劃分為4個任務:系統監控、顯示與輸入、子模件控制和錯誤處理。
系統監控——提交和監控其他子任務。
顯示與輸入——實時顯示信號處理結果和產生輸入消息。
子模件控制——向各子模件發送控制參數和計算數據,由輸入消息驅動。
錯誤處理——根據錯誤類型進行相應處理:顯示錯誤信息、重啟動各模件、中止系統,由出錯消息驅動。
信號處理結果讀取在顯示和輸入任務中完成,其驅動事件為處理結果更新。在被動聲納處理中,短時間能量積累的結果每64ms更新一次,平均功率譜結果每1.5s更新一次;主動聲納處理的幅度信息數據率為1.3kb/s,頻域處理結果更新率為5~10次/s。如果由信號處理模件在數據更新后向MVME177發送中斷事件,由于數據更新率差別較大,可能造成瞬間中斷頻繁,增加處理復雜度。所以采用定時中斷,使用間隔為50ms的定時中斷去檢查數據更新標志,既能保證實時數據刷新,又能簡化處理結構。
各任務間的大批量數據傳輸利用VxWorks的共享內存直接訪問,而傳遞控制消息多采用消息隊列(message queue)。在顯示和輸入任務中有兩類驅動事件:鍵盤、鼠標輸入和顯示數據更新。顯示刷新的優先級應該高于人工輸入,所以在這里使用了信號(signal)。當任務捕獲信號時,立即中斷正在執行的流程,轉而進行信號服務處理。完成后,繼續原處理流程可以保證顯示的實時刷新。
各任務之間的通信機制由4個消息隊列、1個定時中斷和1個信號完成:
消息隊列SystemMsg:系統開機、系統關機、系統復位、系統重啟等,由錯誤處理任務和鍵盤輸入產生;由系統監控任務接收。
消息隊列ParamModifyMsg:更改前端硬件參數、DSP參數等,由鍵盤輸入產生,由子模件控制任務接收。
消息隊列ErrorMsg:定義了各種錯誤類型,由各任務的出錯接口產生;由錯誤處理任務接收。
X消息隊列:由顯示和輸入任務接收(被SeaWindM軟件包封裝)。 定時中斷:由系統監控任務啟動和停止,讀取DSP處理結果。 信號處理:由顯 示和輸入任務注冊,定時中斷發送信號,接收到后進行數據顯示。
系統定義全局變量System_Data。其數據類型為自定義的System_Data_Struct結構。通過System_Data實現任務間的數據交換。
結束語
以上介紹了數字式聲納的顯控系統的設計。基于VxWorks的多任務設計使系統的實時性和穩定性都非常好。目前該顯控系統已通過測試,達到了系統的設計要求。
VxWorks操作系統及實時多任務程序設計
更新時間: 2007-06-27 13:38:06來源: 粵嵌教育瀏覽量:798