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

          新聞中心

          EEPW首頁 > 設(shè)計(jì)應(yīng)用 > 一種可移植的嵌入式圖形支持系統(tǒng):MiniGUI

          一種可移植的嵌入式圖形支持系統(tǒng):MiniGUI

          作者: 時(shí)間:2009-11-29 來源:網(wǎng)絡(luò) 收藏

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


          上一頁 1 2 3 4 下一頁

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();