<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > Windows9x/NT及2000下中斷驅動(dòng)程序的統一化處理

Windows9x/NT及2000下中斷驅動(dòng)程序的統一化處理

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

以其友好的圖形用戶(hù)界面,使得它不僅成為辦公管理首選的操作系統,也日益受到工程技術(shù)人員的關(guān)注,逐漸取代DOS而成為主流的工程應用控制平臺。但是,系統為了保證平臺的安全與完整性,對系統底層操作采取了屏蔽的策略,利用VxD將用戶(hù)與硬件隔離開(kāi)來(lái)。 在9x(95、97、98)下,用戶(hù)如果需要實(shí)現對硬件的、DMA或存儲空間物理地址等資源進(jìn)行訪(fǎng)問(wèn),必須通過(guò)設備驅動(dòng)程序來(lái)進(jìn)行硬件操作;而在Windows下,即使是簡(jiǎn)單的I/O操作,也需要編寫(xiě)驅動(dòng)程序方能與硬件打交道。

本文引用地址:http://dyxdggzs.com/article/202698.htm

  Windows操作系統的主流目前是Windows9x和Windows,而已經(jīng)推出的Windows是以Windows為主要框架的。由于Windows9x和WindowsNT兩者在系統核心上有質(zhì)的不同,所以即使對于同樣一個(gè)硬件,在兩者下的驅動(dòng)程序也有很大的區別。因此,一般而言,需要針對不同的操作系統編寫(xiě)不同的驅動(dòng)程序。

  兼容X86指令的微機CPU運行時(shí)有4個(gè)優(yōu)先級,Ring0~Ring3。操作系統與驅動(dòng)程序運行在Ring0級,可以對所有硬件資源進(jìn)行控制;用戶(hù)程序運行在Ring3級,對資源控制受到一些限制。而對于Ring0級的驅動(dòng)程序而言,它的編寫(xiě)和調試通常需要對操作平臺的運行機制有較深的了解,從而要求程序開(kāi)發(fā)者掌握Windows9x、NT及Windows的內核管理機制,對于開(kāi)發(fā)人員來(lái)講這有相當大的難度。 在這里,筆者使用了美國Jungo公司出品的WinDriver工具包,利用其繞過(guò)了對操作系統內核的學(xué)習掌握這個(gè)難點(diǎn),并且在不更改程序代碼的前提下,完成了在多個(gè)操作系統下對硬件的一致處理,很方便地解決了硬件與程序在不同系統下的移植問(wèn)題。

1 Windows下硬件的管理機制

  在多任務(wù)的環(huán)境里,硬件設備中斷管理程序是非常重要的系統級程序。它不僅要把硬件發(fā)生的中斷時(shí)間傳給相應的驅動(dòng)程序,還要允許某些設備驅動(dòng)程序處理它們特殊的中斷服務(wù)。在Windows平臺下,VPICD(虛擬可編程中斷控制器)就是這樣的硬件設備管理程序,它負責管理所有的硬件中斷時(shí)間。VPICD通過(guò)一個(gè)缺省機制觸發(fā)駐留在VM(虛擬機)內的中斷處理函數。它完全允許VxD根據其需要而重載中斷處理函數。PC機的硬件中斷需要確定硬件中斷的IRQS(中斷申請號),對一個(gè)特定的IRQ中斷源,VPICD或提供缺省的中斷處理函數,或允許其它VxD重載中斷處理函數。

  VPICD提供的缺省中斷處理是:首先置中斷禁止,再觸發(fā)相應VM中的中斷處理函數。因為VPICD實(shí)現了對PPIC(物理可編程中斷控制器,如8259中斷控制器)的虛擬化,所以當VM中的中斷處理函數發(fā)送EOI(中斷處理結束指令)時(shí),VPICD即對PPIC發(fā)EOI指令。最后,VPICD控制處理函數的返回操作,恢復中斷,并置VM狀態(tài)為VM進(jìn)入中斷前的狀態(tài)。當VPICD對某些中斷的缺省處理不夠充分或則不太合適時(shí),就需要親手編寫(xiě)一個(gè)VxD,在其中實(shí)現中斷的虛擬化。VxD將決定如何處理硬件中斷以及如何調用VM中的中斷處理函數。

  下面將要詳述的WinDriver對中斷處理作了很好的封裝,將對VPICD和VM的控制和處理以及某些特殊的驅動(dòng)要求封裝在經(jīng)過(guò)嚴格調試的WinDriver.vxd和WinDriver.sys中,并對調用驅動(dòng)程序的API(應用編程接口)函數進(jìn)行了系統集成,讓使用者直接面對用高級語(yǔ)言集成好的類(lèi)庫和函數接口,從而大大降低了程序開(kāi)發(fā)的難度,縮短了開(kāi)發(fā)周期。

2 WinDriver工具包簡(jiǎn)介

  WinDriver是美國Jungo公司出品的用于編寫(xiě)驅動(dòng)程序的一種工具包,主要針對ISA/PCI插卡,4.2版本以后還提供了USB的開(kāi)發(fā)工具。最新版本4.40版所編寫(xiě)的程序兼容性十分強大,包括了Windows9x、Windows NT、Windows、Windows CE、Linux、Solaris(Intel)、VxWorks (Intel) 、OS/2等諸多操作平臺。WinDriver主要包括一個(gè)WinDriverWizard、一個(gè)WinDriver發(fā)行包、多個(gè)公用程序以及大量的例程。

  (1)WinDriverWizard

  這是一個(gè)友好的Windows向導界面。運行WinDriverWizard,它可以讓你立即接觸到硬件而不用寫(xiě)一句有關(guān)的代碼。這種便利來(lái)自于它的自動(dòng)檢測功能。對于ISA插卡,用戶(hù)可以直接利用它來(lái)讀寫(xiě)卡上的內存、I/O地址、寄存器以及偵聽(tīng)中斷。對于PCI插卡,除了上面的基本功能外,還可以方便地讀寫(xiě)PCI的配置信息。

  在此之后,通過(guò)選擇“GenerateCode”選項,WinDriverWizard會(huì )為你的插卡產(chǎn)生基本的程序代碼。4.2版本以后還提供了多種編程語(yǔ)言選擇,幾乎包括了所有流行的編程語(yǔ)言,如VC4?|VC6、Borland C++Builder3?|4、Pascal、Delphi、Linuxmake、Solariesmake等等。這就讓用戶(hù)不必去學(xué)新的編程語(yǔ)言,很容易地直接上手。


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

關(guān)鍵詞: Windows 2000 NT 中斷

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>