<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > VxWorks操作系統(tǒng)及實時多任務程序設計

          VxWorks操作系統(tǒng)及實時多任務程序設計

          作者: 時間:2012-03-27 來源:網(wǎng)絡 收藏


           ?。?) 存儲管理 在基本的wind內核中,任務直接操作線性物理內存,不存在虛擬存儲等復雜的存儲管理策略,這主要是從性能來考慮的。不過也提供支持POSIX標準的虛擬存儲區(qū)和共享內存(多處理器間共享)組件。
            
           ?。?)任務間通信在任務間傳遞控制信息時,通信量小,wind內核支持各種UNIX的通信手段:信號量(semaphore)、消息隊列(message queue)、管道(pipe)、信號(signal)、套接字(socket)。信號量主要用于對臨界資源訪問的同步和互斥;消息隊列多用于消息驅動機制;管道是基于文件系統(tǒng)實現(xiàn)的任務間按先進先出方式傳送數(shù)據(jù)的通信方式;信號相當于軟中斷;套接字機制主要用于網(wǎng)絡通信。

            當任務間需要大量交換數(shù)據(jù)時,由于直接操作物理內存,可以直接訪問全局存儲區(qū),不需要特別的手段,與Linux下的共享存儲段申請和WindowsNT中的存儲映射文件方式不同。

           ?。?)中斷在下,所有中斷服務程序都不屬于任何一個任務,并且使用同一個棧進行數(shù)據(jù)存儲,則中斷將不會引起上下文切換,以實現(xiàn)高效的中斷響應。中斷與各任務之間可以通過前面所述的各種手段進行通信,但要注意對中斷服務程序有一些限制,例如不能進行可能導致阻塞的資源申請等等。

           ?。?) 文件系統(tǒng) VxWorks支持多種本地文件系統(tǒng):MS_DosFS、RawFS和RT 11FS,可根據(jù)具體配置選擇;還支持網(wǎng)絡文件系統(tǒng)NFS,可以沒有局域文件系統(tǒng)。

           ?。?) 網(wǎng)絡支持 Vxworks支持多種物理介質的TCP/IP協(xié)議族和幾乎所有常用的基于TCP/IP協(xié)議的應用層協(xié)議,例如ARP、BOOTP、SLIP和FTP,甚至其啟動就是通過BOOTP或FTP方式取得系統(tǒng)映像文件的。以上簡單介紹了一些VxWorks的技術特點。要注意,這些特點都是跟VxWorks的特性 ——實時性與嵌入式密切相關的。

            三、 X窗口系統(tǒng)

            本系統(tǒng)采用美國Peritek公司的VCL V圖形控制器插件進行顯示輸出和輸入控制,客戶界面基于X Window。X客戶程序的開發(fā)選用美國SeaWeed公司的SeaWindM軟件。

            X是美國麻省理工學院(MIT)研制的一個可移植的網(wǎng)絡透明的窗口系統(tǒng)。它具有設備獨立性和網(wǎng)絡透明性的特點,即基于X開發(fā)的應用程序不需要重寫或重新編譯就可以在新的顯示硬件上執(zhí)行,并且在網(wǎng)絡環(huán)境下通過X可在網(wǎng)絡任一節(jié)點上運行X的應用程序而不必考慮該節(jié)點的物理位置。

            四、 顯示與控制系統(tǒng)的具體實現(xiàn)

            本系統(tǒng)的功能主要是初始化各處理模件、根據(jù)輸入命令對各處理模件進行控制和對處理結果的實時顯示。這些都是通過與相應子系統(tǒng)的數(shù)據(jù)通信來完成的。對通信數(shù)據(jù)和策略的分析是系統(tǒng)設計的關鍵。系統(tǒng)與其他子系統(tǒng)中存在著這樣幾類通信數(shù)據(jù):與前端模擬子系統(tǒng)的控制信息與數(shù)據(jù)、與數(shù)字信號處理子系統(tǒng)相關的控制信息和數(shù)據(jù)、發(fā)射信號控制信息、顯示數(shù)據(jù)以及從鍵盤和鼠標獲得的輸入信息。這幾類數(shù)據(jù)都是通過VME背板總線傳輸,通過對VME地址空間直接讀寫進行訪問。其中由數(shù)字信號處理子系統(tǒng)送來的數(shù)據(jù)是由數(shù)據(jù)更新事件驅動的。為了滿足實時性的要求,需要在每組結果數(shù)據(jù)更新之前完成通信,因此處理的優(yōu)先級需要很高。

            基于上面的考慮,系統(tǒng)劃分為4個任務:系統(tǒng)監(jiān)控、顯示與輸入、子模件控制和錯誤處理。

            系統(tǒng)監(jiān)控——提交和監(jiān)控其他子任務。
            顯示與輸入——實時顯示信號處理結果和產(chǎn)生輸入消息。
            子模件控制——向各子模件發(fā)送控制參數(shù)和計算數(shù)據(jù),由輸入消息驅動。
            錯誤處理——根據(jù)錯誤類型進行相應處理:顯示錯誤信息、重啟動各模件、中止系統(tǒng),由出錯消息驅動。
            信號處理結果讀取在顯示和輸入任務中完成,其驅動事件為處理結果更新。在被動聲納處理中,短時間能量積累的結果每64ms更新一次,平均功率譜結果每 1.5s更新一次;主動聲納處理的幅度信息數(shù)據(jù)率為1.3kb/s,頻域處理結果更新率為5~10次/s。如果由信號處理模件在數(shù)據(jù)更新后向 MVME177發(fā)送中斷事件,由于數(shù)據(jù)更新率差別較大,可能造成瞬間中斷頻繁,增加處理復雜度。所以采用定時中斷,使用間隔為50ms的定時中斷去檢查數(shù)據(jù)更新標志,既能保證實時數(shù)據(jù)刷新,又能簡化處理結構。

            各任務間的大批量數(shù)據(jù)傳輸利用VxWorks的共享內存直接訪問,而傳遞控制消息多采用消息隊列(message queue)。在顯示和輸入任務中有兩類驅動事件:鍵盤、鼠標輸入和顯示數(shù)據(jù)更新。顯示刷新的優(yōu)先級應該高于人工輸入,所以在這里使用了信號(signal)。當任務捕獲信號時,立即中斷正在執(zhí)行的流程,轉而進行信號服務處理。完成后,繼續(xù)原處理流程可以保證顯示的實時刷新。

            各任務之間的通信機制由4個消息隊列、1個定時中斷和1個信號完成:

            消息隊列SystemMsg:系統(tǒng)開機、系統(tǒng)關機、系統(tǒng)復位、系統(tǒng)重啟等,由錯誤處理任務和鍵盤輸入產(chǎn)生;由系統(tǒng)監(jiān)控任務接收。
            消息隊列ParamModifyMsg:更改前端硬件參數(shù)、DSP參數(shù)等,由鍵盤輸入產(chǎn)生,由子模件控制任務接收。
            消息隊列ErrorMsg:定義了各種錯誤類型,由各任務的出錯接口產(chǎn)生;由錯誤處理任務接收。
            X消息隊列:由顯示和輸入任務接收(被SeaWindM軟件包封裝)。 定時中斷:由系統(tǒng)監(jiān)控任務啟動和停止,讀取DSP處理結果。 信號處理:由顯 示和輸入任務注冊,定時中斷發(fā)送信號,接收到后進行數(shù)據(jù)顯示。
            系統(tǒng)定義全局變量System_Data。其數(shù)據(jù)類型為自定義的System_Data_Struct結構。通過System_Data實現(xiàn)任務間的數(shù)據(jù)交換。

            結束語

            以上介紹了數(shù)字式聲納的顯控系統(tǒng)的設計?;赩xWorks的多任務設計使系統(tǒng)的實時性和穩(wěn)定性都非常好。目前該顯控系統(tǒng)已通過測試,達到了系統(tǒng)的設計要求。

          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();