日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]利用WinDriver開發(fā)PCI設備驅動程序

摘要:WinDriver是一套PCI驅動程序開發(fā)包。它改變了傳統(tǒng)驅動程序開發(fā)的方法與思路,極在地簡化了驅動程序的編制;同時,又沒有犧牲驅動程序的性能,是一套高效、快捷的PCI驅動程序開發(fā)軟件包。特別適合專業(yè)硬件人員的使用。

WinDriver是Jungo公司出版的一個設備驅動程序開發(fā)組件,它可以大大加速PCI設備驅動程序的開發(fā)。作者在實際的項目中采用了WinDriver來開發(fā)設備驅動程序,取得了相當好的運行效果。從目前國內的資料上來看,大多數設計人員還是在用DDK、Wtools開發(fā)設備驅動程序,因而作者覺得有必要向大家介紹與推薦這個軟件。

WinDriver是一套設備驅動程序開發(fā)組件,它的目的就是方便Windows程序員快速開發(fā)出PCI/ISA設備的Windows驅動程序(目前最新的版本V4.32還支持PCMCIA、USB設備的驅動程序的開發(fā),并且除了支持Windows9X/NT系統(tǒng)外,還有支持Unix、Windows CE的版本推出)。利用WinDriver開發(fā)設備驅動程序,不需要熟悉操作系統(tǒng)的內核,整個驅動程序中的所有函數都是工作在用戶態(tài)下的,通過與WinDriver的.Vxd或者.Sys文件交互來達到驅動硬件的目的。由于是一個用戶態(tài)程序,效率的高低也就成了人們選擇WinDriver時關心的一個問題。大量實踐數據表明,WinDriver并沒有通過犧牲系統(tǒng)性能來換取驅動程序的快速開發(fā),的確是一個“像開發(fā)用戶態(tài)程序那樣簡單,像核心態(tài)程序那樣高效”[1]的開發(fā)工具。

1 WinDriver主要特征

  ·提供了從用戶層訪問硬件的簡單方法;

  ·能夠方便地將性能要求特別苛刻的部分通過Windriver提供的API插入到核心態(tài)模式運行,提高執(zhí)行效率;

  ·對主流PCI接口芯片(AMCC、PLX、V3系列)提供了很好的支持;

  ·可以利用常見的軟件開發(fā)平臺(Visual C++、Borland C++、VB4、Java、Delphi);

  ·支持I/O、DMA、中斷處理,支持PCI、ISA、EISA設備的開發(fā);

  ·無需DDK以及核心態(tài)程序開發(fā)的經驗。

2 開發(fā)步驟

  a.根據WinDriver的文檔,建議開發(fā)步驟如下:

  ·修改代碼,加入定制功能;

  ·在用戶態(tài)執(zhí)行與調試代碼;

  ·將性能苛刻部分插入到核心態(tài);

b.我們在實際編寫驅動程序的過程中發(fā)現,完全用WinDriver提供API來寫驅動程序比在Wizard生成的框架代碼上修改更為靈活。一般來說,PCI驅動程序分成3個部分:初始化部分,對硬件資源的訪問函數庫、具體調用部分。其中,后面兩個部分對于不同的硬件都是基本一致的。比如說,我們先后開發(fā)的基于AMCC5933與PLX9052的PCI接口卡,對于他們的硬件資源訪問,用的都是WinDriver下面相同的API;兩者開發(fā)的不同只在于初始化時對于硬件資源的鎖定。所以只要開發(fā)出了針對一種接口芯片的系統(tǒng)的驅動代碼后,以后一般只要修改接口芯片的ID值及一些寄存器的偏移值,就能夠移植了,比每次生成不同的框架代碼再改動也許要更簡便。

3 實例分析

整個驅動程序的結構大致如下:

  ·打開WinDriver設備;

  ·查找我們要訪問的PCI設備;

  ·枚舉該設備的資源(內存、I/O、中斷);

  ·鎖定該設備的資源只能為我們所用,不能被其他程序訪問;

  ·訪問板上的資源;

  ·解鎖資源;

  ·關閉WinDriver設備。

以下為一段使用WinDriver開發(fā)的AMCC5933DMA的驅動代碼,利用這個程序來演示WinDriver的程序結構。這個程序只要稍加修改,就可以用來作為其他PCI卡的驅動程序的一部分,例如PLX9050、9054。為了節(jié)省篇幅,省略了變量說明部分。程序中出現的變量大都由其名稱可以反映含義,具體可以參見WinDriver的設計文檔中的說明。

  hWD=WD_Open(); //打開WinDriver設備,每次使用前必須調用;

  pciScan.searched.dwVendorId=0x10e8; //AMCC公司供貨號

  pciScan.searched.dwDeviceId=0x4750; //AMCC5933的設備號

  WD_PciScanCards (hWD,&pciSxcan); //枚舉PCI槽上的設備

  pciSlot =pciScan.cardSilt[0]; //假設只有我們一個設備得到設備槽的號碼

  pciCardInfo.pciSlot=pciSlot;

  WD_PciGetCardInfo(hWD,&pciCardInfo); //得到該設備槽上的設備信息

  Card=pciCardInfo.Card; //Card為一個反映PCI卡上資源的結構

  cardReg.Card=Card;

  WD_CardRegister(hWD,&cardReg); //向核心態(tài)登記,鎖定卡上資源

  Item=Card.Item[2]; //將卡上的號為2的資源賦給Item

  if(Item.item==ITEM_MEMORY)

  {

  regAddr=Item.I.Mem.dwUserDirectAddr; //得到PCI卡上的內存映射到用戶態(tài)的地址

  }

  Dma1.dwBytes=4*dwDWord;

  Dma1.pUserAddr=pBuffer1;

  Dma1.dwOptiONs=0;

  WD_DMALock(hWD,&Dma1); //鎖定用于DMA的內存資源

至此與PCI卡上的內存進行DMA傳輸的準備已經完成,下面只要寫相應的控制字就可以啟動DMA操作了。

4 常見問題的解答

(1)評估版本的功能限制及其解決

評估版本除了30天的限制外,與正式版本相比還有3個限制。其中影響最大的是所有的關閉函數(DMA鎖定內存的解鎖,資源的關閉…)都加了延時。這樣我們在做數據采集卡的驅動程序時就要注意,最好只分配一次資源。比如說做DMA操作,不要反復地鎖定內存,這樣會在解鎖時損失效率。一個折衷的方法是鎖定DMA內存后,一旦這塊內存寫滿后,就將其中數據拷到用戶態(tài)程序分配的大內存中去。

(2)用WinDriver開的程序效率

在使用WinDriver或者VxdTools這類工具時,大家最關心的一個問題可能就是效率問題。從實踐與分析來看,WinDriver生成的驅動代碼的效率相當地高。比如PCI卡的高速數據采集涉及到DMA的應用,WinDriver提供相應的API來將卡上的內存映射到用戶態(tài)程序所能直接訪問的地址空間中,然后直接對這個映射后得到的地址進行DMA操作。也就是說,與用DDK來直接編寫驅動程序的區(qū)別就在于地址映射的操作上,在這部分工作上面,用WinDriver的API肯定沒有直接用DDK寫的專門面向特定硬件優(yōu)化的代碼來得高效。但是這部分代碼實際上屬于初始化工作,這部分的效率高低事實上并不會影響總體上的效率。

實際中,用WinDriver編寫的PCI驅動程序在賽揚466、64M內存的機器上,在8位模式下可以穩(wěn)定地采集4~8Mbytes/s的數據。而且隨著硬件設計的改變,肯定還有提高余地。

經過實際應用,發(fā)現WinDriver這個軟件使用快速,無論是開發(fā)效率還是實際達到的性能指標都相當令人滿意。特別對于硬件開發(fā)人員來說,可以不必了解繁瑣的操作系統(tǒng)的內核知識,就可以快速地開發(fā)出驅動程序,對于調試硬件是一個很好的幫助工具。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉