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

          關(guān) 閉

          新聞中心

          EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > Windows CE和 Windows2000/XP設(shè)備驅(qū)動(dòng)開(kāi)發(fā)的區(qū)別

          Windows CE和 Windows2000/XP設(shè)備驅(qū)動(dòng)開(kāi)發(fā)的區(qū)別

          作者: 時(shí)間:2009-12-28 來(lái)源:網(wǎng)絡(luò) 收藏


          引 言
          CE是一個(gè)32位、多任務(wù)、多線(xiàn)程的嵌入式操作系統(tǒng),是微軟專(zhuān)門(mén)為信息、移動(dòng)應(yīng)用、消費(fèi)類(lèi)電子產(chǎn)品、嵌入式應(yīng)用等非PC領(lǐng)域設(shè)計(jì)的操作系統(tǒng)產(chǎn)品,在外觀和使用的感覺(jué)上十分接近桌面系統(tǒng)。它使用平面內(nèi)存模式尋址,可以同時(shí)運(yùn)行多個(gè)程序并支持一個(gè)程序中的多個(gè)線(xiàn)程,并且非常精煉,只有很小的內(nèi)存要求。與基于PC的操作系統(tǒng)不同, CE不需要標(biāo)準(zhǔn)硬件,反而支持各種各樣的CPU(如X86、PowerPC、ARM、MIPS等),通過(guò)OEM適配層(OEM adaptation layer)可以把Windows CE適配到任何硬件平臺(tái)。Windows CE是微軟Windows操作系統(tǒng)家族的一個(gè)成員,支持用于Windows /XP和Windows 98等桌面Windows操作系統(tǒng)的Win32 API的一個(gè)子集。由于它不是桌面Windows操作系統(tǒng)的一部分或縮減版本,使得開(kāi)發(fā)Windows CE的驅(qū)動(dòng)程序與開(kāi)發(fā)桌面Windows的驅(qū)動(dòng)程序有所不同。本文將著重討論這些區(qū)別,以使廣大熟悉桌面Windows驅(qū)動(dòng)程序開(kāi)發(fā)的程序員能快速掌握嵌入式操作系統(tǒng)WindowsCE驅(qū)動(dòng)程序的開(kāi)發(fā)方法。

          本文引用地址:http://www.ex-cimer.com/article/202582.htm

          1 驅(qū)動(dòng)結(jié)構(gòu)模型比較
          在桌面Windows系統(tǒng),以支持Windows/XP的WDM驅(qū)動(dòng)模型為例。WDM體系結(jié)構(gòu)實(shí)行分層處理,即驅(qū)動(dòng)被分成了若干層――最高層驅(qū)動(dòng)程序、中間層驅(qū)動(dòng)程序、最低層驅(qū)動(dòng)程序,如圖1所示。

          在Windows CE驅(qū)動(dòng)中,按驅(qū)動(dòng)的結(jié)構(gòu)可以分為兩種類(lèi)型――分層式驅(qū)動(dòng)程序和整體式驅(qū)動(dòng)程序,如圖2所示。分層式設(shè)備驅(qū)動(dòng)程序由上層和下層兩部分代碼組成。上層的程序叫做模型設(shè)備驅(qū)動(dòng)程序(MDD),下層的程序則叫做平臺(tái)相關(guān)的驅(qū)動(dòng)程序(PDD)。整體式驅(qū)動(dòng)程序的源代碼由中斷服務(wù)線(xiàn)程代碼和針對(duì)平臺(tái)的代碼組成。
          同桌面Windows設(shè)備驅(qū)動(dòng)結(jié)構(gòu)模型相比,Windows CE設(shè)備驅(qū)動(dòng)相對(duì)簡(jiǎn)單一些。正如圖1和圖2所示,兩種操作系統(tǒng)的設(shè)備驅(qū)動(dòng)雖然存在許多相似的地方,都采用了模塊、分層的設(shè)計(jì)方法,但是還存在許多不同的地方。在Windows CE操作系統(tǒng)中,分層的驅(qū)動(dòng)程序并不適用于所用的驅(qū)動(dòng),尤其是將驅(qū)動(dòng)程序分為兩層將會(huì)導(dǎo)致在驅(qū)動(dòng)程序操作時(shí)附加的功能調(diào)用,這無(wú)疑會(huì)降低驅(qū)動(dòng)程序的效率。對(duì)于時(shí)間或性能關(guān)鍵的實(shí)時(shí)操作,整體式驅(qū)動(dòng)程序?qū)?huì)更適合。

          在桌面Windows系統(tǒng)中,驅(qū)動(dòng)各層通信之間使用一種稱(chēng)為I/O請(qǐng)求包(IRP)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行通信。影響到設(shè)備的每個(gè)操作都使用I/O請(qǐng)求包,采用層次結(jié)構(gòu)可以使I/O請(qǐng)求過(guò)程更加明了。I/O管理器發(fā)送IRP來(lái)請(qǐng)求驅(qū)動(dòng)程序的處理,通常IRP由分層的驅(qū)動(dòng)程序棧來(lái)處理,高層的驅(qū)動(dòng)程序把請(qǐng)求劃分成更簡(jiǎn)單的請(qǐng)求并傳遞給下層驅(qū)動(dòng)程序。IRP首先被送到設(shè)備堆棧的最上層驅(qū)動(dòng)程序,然后逐漸過(guò)濾到下層的驅(qū)動(dòng)程序。每一層驅(qū)動(dòng)程序都可以決定如何處理IRP。而Windows CE驅(qū)動(dòng)各層之間的通信沒(méi)有采用IRP通信機(jī)制,而是通過(guò)接口函數(shù)調(diào)用實(shí)現(xiàn)的。設(shè)備驅(qū)動(dòng)程序接口(Device Driver Interface,DDI)是在MDD層中實(shí)現(xiàn)的函數(shù)集,系統(tǒng)中的GWES模塊通過(guò)這個(gè)接口調(diào)用設(shè)備驅(qū)動(dòng)程序;設(shè)備驅(qū)動(dòng)程序服務(wù)器接口(Device Driver Service Provider Interface,DDSI)是在PDD層中實(shí)現(xiàn)的函數(shù)集并由MDD調(diào)用。

          2 設(shè)備驅(qū)動(dòng)組成部分比較
          簡(jiǎn)單地說(shuō),驅(qū)動(dòng)程序是一些例程的集合,它們被動(dòng)地存在,等待主機(jī)系統(tǒng)軟件來(lái)調(diào)用或激活它們。在Win-dows系統(tǒng)中驅(qū)動(dòng),具體的驅(qū)動(dòng)程序有所不同,其包含的例程也不同,但其主要例程是相同的。圖3描述一個(gè)Windows驅(qū)動(dòng)的基本流程。

          以下從幾個(gè)方面闡述WindowsCE和桌面Windows設(shè)備驅(qū)動(dòng)組成的不同。
          2.1 驅(qū)動(dòng)程序的入口點(diǎn)
          在桌面Windows和Windows CE兩個(gè)系統(tǒng)中的驅(qū)動(dòng)程序都含有初始化模塊,該模塊主要功能是完成驅(qū)動(dòng)程序的初始化及卸載。在桌面Windows系統(tǒng)的初始化模塊中,包括每一個(gè)設(shè)備驅(qū)動(dòng)程序都有的一個(gè)初始化入口點(diǎn)――DriverEntry例程,每次設(shè)備驅(qū)動(dòng)程序啟動(dòng)時(shí)該例程被系統(tǒng)自動(dòng)調(diào)用。其最重要的功能是設(shè)置驅(qū)動(dòng)程序?qū)?yīng)于I/O請(qǐng)求的主功能代碼(MajorFunction)的回調(diào)例程。DriverEntry例程如下:


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();