新聞中心

        EEPW首頁 > 設計應用 > 一種可移植的嵌入式圖形支持系統:MiniGUI

        一種可移植的嵌入式圖形支持系統:MiniGUI

        作者: 時間:2009-11-29 來源:網絡 收藏

          
          基于的嵌入式系統軟件結構
          
          為什么能夠在如此眾多的嵌入式操作系統上運行?這是因為具有良好的軟件架構,通過抽象層將MiniGUI上層和底層操作系統隔離開來。如圖2所示,基于MiniGUI的應用程序一般通過 ANSI C庫以及MiniGUI自身提供的API來實現自己的功能;MiniGUI中的“層”可將特定操作系統及底層硬件的細節隱藏起來,而上層應用程序則無需關心底層的硬件平臺輸出和輸入設備。
          
          另外,MiniGUI特有的運行模式概念,也為跨操作系統的支持提供了便利。
          
          與Linux這樣的類UNIX操作系統相比,一般意義上的傳統嵌入式操作系統具有一些特殊性。舉例而言,諸如uClinux、uC/OS-II、eCos、VxWorks等操作系統,通常運行在沒有內存管理單元的CPU上;這時,往往就沒有進程的概念,而只有線程或者任務的概念,這樣,GUI系統的運行環境也就大相徑庭。因此,為了適合不同的操作系統環境,我們可將MiniGUI配置成三種運行模式:
          
          1.MiniGUI-Threads。運行在MiniGUI-Threads上的程序可以在不同的線程中建立多個窗口,但所有的窗口在一個進程或者地址空間中運行。這種運行模式非常適合于大多數傳統意義上的嵌入式操作系統,如uC/OS-II、eCos、VxWorks、pSOS等等。當然,在Linux和uClinux上,MiniGUI也能以MiniGUI-Threads的模式運行。
          
          2. MiniGUI-Lite。與MiniGUI-Threads相反,MiniGUI-Lite上的每個程序是單獨的進程,每個進程也可以建立多個窗口。MiniGUI-Lite適合于具有完整UNIX特性的嵌入式操作系統,比如嵌入式Linux。
          
          3. MiniGUI-Standalone。這種運行模式下,MiniGUI能以獨立進程的方式運行,既不需要多線程也不需要多進程的支持,這種運行模式適合功能單一的應用場合。例如在一些使用uClinux的嵌入式產品中,因為各種原因而缺少線程支持,這時,就可以使用MiniGUI-Standalone來開發應用軟件。
          
          一般而言,MiniGUI-Standalone模式的適應面最廣,可以支持幾乎所有的操作系統,甚至包括類似DOS這樣的操作系統;MiniGUI-Threads模式的適用面次之,可運行在支持多任務的實時嵌入式操作系統,或者具備完整UNIX特性的普通操作系統;MiniGUI-Lite模式的適用面較小,它僅適合于具備完整UNIX特性的普通操作系統。
          
          不論采用哪種運行模式,MiniGUI為上層應用軟件提供了最大程度上的一致性;只有少數幾個涉及初始化的接口在不同運行模式上有所不同。
          
          MiniGUI在uC/OS-II操作系統上的移植
          
          下面以uC/OS-II操作系統為例,簡單介紹MiniGUI到該操作系統上的移植。
          
          uC/OS-II非常簡單,只要有一個普通的C編譯器,就能完成編譯并運行該操作系統,因此,uC/OS-II首先在教學中得到了廣泛應用。因為其簡單及實時性好的特點,現在也有一些用戶開始使用uC/OS-II操作系統開發正式的嵌入式產品。
          
          將MiniGUI移植到uC/OS-II是相對復雜的一項工作。因為uC/OS-II中缺乏象malloc/free甚至是printf/fprintf/sprintf這樣的接口,不過,最重要的還是缺乏與POSIX-Threads兼容的接口。為此,我們編寫了POSIX-Threads的繞轉接口,這些繞轉接口兼容于POSIX-Threads。同時,我們還實現了 malloc/free,以及printf/sprintf/fprintf等接口。
          
          因涉及到如此多底層特性的增強和修改,整個系統的調試將是非常困難的。為解決調試問題,我們首先在SkyEye(清華大學陳渝主持的自由軟件項目)模擬器上運行uC/OS-II操作系統及MiniGUI for uC/OS-II。我們首先使用了MiniGUI內部的Dummy GAL引擎和Dummy/Auto IAL 引擎(這兩個引擎分別通過軟件方法來模擬實際的輸出和輸入設備,如LCD顯示屏及鍵盤)來運行MiniGUI的應用程序。盡管我們看不到真實的屏幕輸出,但從應用程序在運行過程中打印的輸出信息,我們可以看到MiniGUI for uC/OS-II已經正常工作了。接下來的工作就是將MiniGUI for uC/OS-II移植到正式的硬件產品中。
          
          我們在S3C2410開發板上用ADS的armcc編譯并測試了MiniGUI的uC/OS-II版本。這次,我們針對這個開發板編寫了正式的圖形和輸入引擎。MiniGUI的所有示例程序都可以在這塊開發板上正常運行。


        上一頁 1 2 3 4 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 丰城市| 洮南市| 昌吉市| 虹口区| 绍兴县| 金塔县| 咸丰县| 中超| 宿迁市| 海晏县| 普陀区| 安徽省| 大余县| 栾川县| 阳江市| 伊川县| 铜山县| 双流县| 溆浦县| 北票市| 元氏县| 宝鸡市| 保康县| 扎兰屯市| 明光市| 屏东县| 奉新县| 恭城| 章丘市| 喀什市| 莱西市| 麟游县| 邢台市| 固始县| 永寿县| 大名县| 宁河县| 临江市| 无锡市| 陈巴尔虎旗| 苗栗市|