新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > VxWorks環境下基于Zinc的通信

        VxWorks環境下基于Zinc的通信

        作者: 時間:2012-03-27 來源:網絡 收藏

        1 引言

          是美國Wind River Systems公司開發的一種嵌入式實時操作系統,它以高性能可剪裁的微內核以及友好的用戶開發環境在嵌入式實時操作系統領域占有重要的地位。

          在很多實時應用場合(如嵌入式地理信息系統) ,需要在環境下設計圖形用戶界面(GUI) 。提供了兩種開發圖形用戶界面的組件:WindML (Wind多媒體庫)和。WindML為圖形、圖象和聲音應用程序的開發提供了基本技術,并且提供了為定制設備開發標準化驅動程序的框架。 是以WindML為基礎的, 是為應用創建圖形用戶界面提供框架的可擴展的面向對象的類庫。Zinc為實現復雜的圖形用戶界面提供了更多的支持。

          為了提高性能和簡化源代碼,大多數情況下在一個實時環境中的應用程序是以多任務的方式實現的, Zinc自身通常也是多任務的。一般不在外部任務里直接處理GUI ,而是在一個專用的GUI任務里執行所有的GUI處理。在多任務環境下,非GUI任務將需要在不同的時期和GUI任務, GUI也可能需要與外部任務。GUI任務與非GUI任務之間的方式將對整個實時系統的實時性、可靠性和穩定性產生重大的影響。因此, 深入研究VxWorks環境下Zinc所支持的GUI任務與非GUI任務之間的通信方式并確定在特定應用場合選擇通信方式的原則是非常重要的。

        2 GUI( Zinc)任務和外部任務之間的通信方法

          GUI任務和非GUI任務之間的通信大致可以分為兩種:同步通信和異步通信。Zinc主要提供了如下幾種通信機制供程序員選擇使用:

          Zinc入口點
          共享內存
          OS消息隊列
          派生設備
          a)Zinc入口點

          可以利用Zinc入口點實現GUI任務與非GUI任務之間的通信,主要有如下兩種方法:

          與Zinc通信的基本入口點是ZafEventManager::Put()程序。利用該函數可以在Zinc事件隊列中放置一個事件。這是一個異步方法,因此只能適用于可接受異步通信的場合。

          ZafApplication::BeginSynchronize() 和ZafApplication::EndSynchronize() 。這兩個函數自身并不是通信程序,但能確保直接通信方式訪問Zinc是安全的。直接通信通常由一個對象的Event()函數來實現,也可能采用其它的方式,比如數據對象更新。間接通信可以使用ZafEventManager::Unblock()函數來實現。使用一個派生設備或其它方法進行通信的時候, 使用該函數可以使正在等待事件的Zinc任務解除阻塞。

        b)共享內存

          在VxWorks中很容易實現共享內存。為了安全地共享內存,最好讓一個信號量和共享內存關聯。這樣可以避免任務之間出現資源沖突。

          使用共享內存的時候,通常不需要使用Zinc 提供的保證線程安全的入口點。但是當一個窗口對象的某個成員指向共享內存的時候是一個例外情況。例如,如果一個ZafButton的bitmapData 成員正指向共享內存,除非已經確保Zinc任務目前沒有使用該共享內存,才能安全地更新該共享內存。可以使用ZafApplication:: BeginSynchronize() 和ZafApplication::EndSynchronize() 函數來保證在某一時刻該任務是唯一使用該共享內存的任務。

        c)OS消息隊列

          在VxWorks環境下使用Zinc的時候,有兩種不同類型的消息隊列可供選用:事件管理器消息隊列和VxWorks操作系統提供的消息隊列。

          可以通過ZafEventManager::Put()和ZafEventManager::Get()函數訪問事件管理器消息隊列。事件管理器隊列只提供從非GUI任務到Zinc任務的通信,利用事件管理器隊列進行從GUI任務到非GUI任務的通信是不實用的。

          VxWorks消息隊列可以實現從GUI任務到非GUI任務的通信,也可以實現從非GUI任務到GUI任務的通信,但是不允許同時在兩個方向上進行通信。


        上一頁 1 2 3 下一頁

        關鍵詞: VxWorks Zinc 通信

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 乌兰浩特市| 灵川县| 依兰县| 高安市| 兴宁市| 九台市| 喜德县| 白城市| 阳谷县| 冕宁县| 高雄市| 平泉县| 同江市| 永城市| 新干县| 四会市| 广丰县| 上杭县| 白山市| 克什克腾旗| 富顺县| 登封市| 河北省| 古蔺县| 锡林郭勒盟| 凤山市| 稻城县| 黑河市| 瓮安县| 大洼县| 通许县| 遵化市| 霍山县| 余庆县| 原平市| 伊春市| 金门县| 安福县| 滨州市| 固始县| 双牌县|