国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

利用WinDriver開發(fā)PCI設(shè)備驅(qū)動(dòng)程序

發(fā)布時(shí)間:2009-3-25 16:31    發(fā)布者:李寬
WinDriver是Jungo公司出版的一個(gè)設(shè)備驅(qū)動(dòng)程序開發(fā)組件,它可以大大加速PCI設(shè)備驅(qū)動(dòng)程序的開發(fā)。作者在實(shí)際的項(xiàng)目中采用了WinDriver來開發(fā)設(shè)備驅(qū)動(dòng)程序,取得了相當(dāng)好的運(yùn)行效果。從目前國(guó)內(nèi)的資料上來看,大多數(shù)設(shè)計(jì)人員還是在用DDK、Vtools開發(fā)設(shè)備驅(qū)動(dòng)程序,因而作者覺得有必要向大家介紹與推薦這個(gè)軟件。WinDriver是一套設(shè)備驅(qū)動(dòng)程序開發(fā)組件,它的目的就是方便Windows程序員快速開發(fā)出PCI/ISA設(shè)備的Windows驅(qū)動(dòng)程序(目前最新的版本V4.32還支持PCMCIA、USB設(shè)備的驅(qū)動(dòng)程序的開發(fā),并且除了支持Windows9X/NT系統(tǒng)外,還有支持Unix、WindowsCE的版本推出)。利用WinDriver開發(fā)設(shè)備驅(qū)動(dòng)程序,不需要熟悉操作系統(tǒng)的內(nèi)核,整個(gè)驅(qū)動(dòng)程序中的所有函數(shù)都是工作在用戶態(tài)下的,通過與WinDriver的.Vxd或者.Sys文件交互來達(dá)到驅(qū)動(dòng)硬件的目的。由于是一個(gè)用戶態(tài)程序,效率的高低也就成了人們選擇WinDriver時(shí)關(guān)心的一個(gè)問題。大量實(shí)踐數(shù)據(jù)表明,WinDriver并沒有通過犧牲系統(tǒng)性能來?yè)Q取驅(qū)動(dòng)程序的快速開發(fā),的確是一個(gè)“像開發(fā)用戶態(tài)程序那樣簡(jiǎn)單,像核心態(tài)程序那樣高效”[1]的開發(fā)工具。
圖1是WinDriver的體系結(jié)構(gòu)圖。


1 WinDriver主要特征
  ·提供了從用戶層訪問硬件的簡(jiǎn)單方法;
  ·能夠方便地將性能要求特別苛刻的部分通過Windriver提供的API插入到核心態(tài)模式運(yùn)行,提高執(zhí)行效率;
  ·對(duì)主流PCI接口芯片(AMCC、PLX、V3系列)提供了很好的支持;
  ·可以利用常見的軟件開發(fā)平臺(tái)(Visual C++、Borland C++、VB4、Java、Delphi);
  ·支持I/O、DMA、中斷處理,支持PCI、ISA、EISA設(shè)備的開發(fā);
  ·無需DDK以及核心態(tài)程序開發(fā)的經(jīng)驗(yàn)。
2 開發(fā)步驟
a.根據(jù)WinDriver的文檔,建議開發(fā)步驟如下:
  · 打開WinDriver  Wizard,利用Wizard來分析待開發(fā)驅(qū)動(dòng)程序的卡,然后自動(dòng)生成驅(qū)動(dòng)程序的框架代碼;
  · 修改代碼,加入定制功能;
  · 在用戶態(tài)執(zhí)行與調(diào)試代碼;
  · 將性能苛刻部分插入到核心態(tài);
b.我們?cè)趯?shí)際編寫驅(qū)動(dòng)程序的過程中發(fā)現(xiàn),完全用WinDriver提供的API來寫驅(qū)動(dòng)程序比在Wizard生成的框架代碼上修改更為靈活。一般來說,PCI驅(qū)動(dòng)程序分成3個(gè)部分:初始化部分,對(duì)硬件資源的訪問函數(shù)庫(kù)、具體調(diào)用部分。其中,后面兩個(gè)部分對(duì)于不同的硬件都是基本一致的。比如說,我們先后開發(fā)的基于AMCC5933與PLX9052的PCI接口卡,對(duì)于他們的硬件資源訪問,用的都是WinDriver下面相同的API;兩者開發(fā)的不同只在于初始化時(shí)對(duì)于硬件資源的鎖定。所以只要開發(fā)出了針對(duì)一種接口芯片的系統(tǒng)的驅(qū)動(dòng)代碼后,以后一般只要修改接口芯片的ID值及一些寄存器的偏移值,就能夠移植了,比每次生成不同的框架代碼再改動(dòng)也許要更簡(jiǎn)便。
3 實(shí)例分析
整個(gè)驅(qū)動(dòng)程序的結(jié)構(gòu)大致如下:
    · 打開WinDriver設(shè)備;
    · 查找我們要訪問的PCI設(shè)備;
    · 枚舉該設(shè)備的資源(內(nèi)存、I/O、中斷);
  · 鎖定該設(shè)備的資源只能為我們所用,不能被其他程序訪問;
  · 訪問板上的資源;
  · 解鎖資源;
  · 關(guān)閉WinDriver設(shè)備。
以下為一段使用WinDriver開發(fā)的AMCC5933DMA的驅(qū)動(dòng)代碼,利用這個(gè)程序來演示W(wǎng)inDriver的程序結(jié)構(gòu)。這個(gè)程序只要稍加修改,就可以用來作為其他PCI卡的驅(qū)動(dòng)程序的一部分,例如PLX9050、9054。為了節(jié)省篇幅,省略了變量說明部分。程序中出現(xiàn)的變量大都由其名稱可以反映含義,具體可以參見WinDriver的設(shè)計(jì)文檔中的說明。
  hWD=WD_Open();                      //打開WinDriver設(shè)備,每次使用前必須調(diào)用;
  pciScan.searchId.dwVendorId=0x10e8;      //AMCC公司供貨號(hào)
  pciScan.searchId.dwDeviceId=0x4750;
                                              //AMCC5933的設(shè)備號(hào)
  WD_PciScanCards (hWD, &pciScan);
                                              //枚舉PCI槽上的設(shè)備
  pciSlot=pciScan.cardSlot[0];        //假設(shè)只有我們一個(gè)設(shè)備,得到設(shè)備槽的號(hào)碼
  pciCardInfo.pciSlot=pciSlot; 
  WD_PciGetCardInfo(hWD,&pciCardInfo);  //得到該設(shè)備槽上的設(shè)備信息
  Card=pciCardInfo.Card;            //Card為一個(gè)反映PCI卡上資源的結(jié)構(gòu)
  cardReg.Card=Card;
  WD_CardRegister(hWD,&cardReg);         //向核心態(tài)登記,鎖定卡上資源
  Item=Card.Item[2];                //將卡上的號(hào)為2的資源賦給Item
  if(Item.item==ITEM_MEMORY)
  {
    regAddr=Item.I.Mem.dwUserDirectAddr;  //得到PCI卡上的內(nèi)存映射到用戶態(tài)的地址
    }
    Dma1.dwBytes=4*dwDWord;
    Dma1.pUserAddr=pBuffer1;
    Dma1.dwOptions=0;
    WD_DMALock(hWD,&Dma1);               //鎖定用于DMA的內(nèi)存資源
    至此與PCI卡上的內(nèi)存進(jìn)行DMA傳輸?shù)臏?zhǔn)備已經(jīng)完成,下面只要寫相應(yīng)的控制字就可以啟動(dòng)DMA操作了。
4 常見問題的解答
(1)評(píng)估版本的功能限制及其解決
評(píng)估版本除了30天的限制外,與正式版本相比還有3個(gè)限制。其中影響最大的是所有的關(guān)閉函數(shù)(DMA鎖定內(nèi)存的解鎖,資源的關(guān)閉...)都加了延時(shí)。這樣我們?cè)谧鰯?shù)據(jù)采集卡的驅(qū)動(dòng)程序時(shí)就要注意,最好只分配一次資源。比如說做DMA操作,不要反復(fù)地鎖定內(nèi)存,這樣會(huì)在解鎖時(shí)損失效率。一個(gè)折衷的方法是鎖定DMA內(nèi)存后,一旦這塊內(nèi)存寫滿后,就將其中數(shù)據(jù)拷到用戶態(tài)程序分配的大內(nèi)存中去。
(2)用WinDriver開發(fā)的程序效率
在使用WinDriver或者VxdTools這類工具時(shí),大家最關(guān)心的一個(gè)問題可能就是效率問題。從實(shí)踐與分析來看,WinDriver生成的驅(qū)動(dòng)代碼的效率相當(dāng)?shù)馗摺1热鏟CI卡的高速數(shù)據(jù)采集涉及到DMA的應(yīng)用,WinDriver提供了相應(yīng)的API來將卡上的內(nèi)存映射到用戶態(tài)程序所能直接訪問的地址空間中,然后直接對(duì)這個(gè)映射后得到的地址進(jìn)行DMA操作。也就是說,與用DDK來直接編寫驅(qū)動(dòng)程序的區(qū)別就在于地址映射的操作上,在這部分工作上面,用WinDriver的API肯定沒有直接用DDK寫的專門面向特定硬件優(yōu)化的代碼來得高效。但是這部分代碼實(shí)際上屬于初始化工作,這部分的效率高低事實(shí)上并不會(huì)影響總體上的效率。
實(shí)際中,用WinDriver編寫的PCI驅(qū)動(dòng)程序在賽揚(yáng)466、64M內(nèi)存的機(jī)器上,在8位模式下可以穩(wěn)定地采集4~8Mbytes/s的數(shù)據(jù)。而且隨著硬件設(shè)計(jì)的改變,肯定還有提高余地。
經(jīng)過實(shí)際應(yīng)用,發(fā)現(xiàn)WinDriver這個(gè)軟件使用快速,無論是開發(fā)效率還是實(shí)際達(dá)到的性能指標(biāo)都相當(dāng)令人滿意。特別對(duì)于硬件開發(fā)人員來說,可以不必了解繁瑣的操作系統(tǒng)的內(nèi)核知識(shí),就可以快速地開發(fā)出驅(qū)動(dòng)程序,對(duì)于調(diào)試硬件是一個(gè)很好的幫助工具。
本文地址:http://m.qingdxww.cn/thread-3174-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • FPGA設(shè)計(jì)流程培訓(xùn)教程
  • Chiptorials ——如何將CryptoAuthLib庫(kù)用于Microchip安全身份驗(yàn)證IC
  • Chiptorials ——使用ATECC608 TrustFLEX實(shí)現(xiàn)基本非對(duì)稱身份驗(yàn)證
  • Chiptorials——如何使用ATECC608 TrustFLEX實(shí)現(xiàn)公鑰輪換
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产乱了真实在线观看 | 亚洲国产亚洲综合在线尤物 | 国产日韩亚洲欧洲一区二区三区 | 黄色免费观看网站 | 自拍偷拍亚洲视频 | 摸一摸操一操 | 欧美日韩中文字幕在线 | 青青热久久国产久精品秒播 | 欧美日韩中文字幕一区二区高清 | 高清h黄动漫在线观看 | 91香蕉国产在线观看免费永久 | 羞羞视频免费观看网站 | 欧美在线高清视频播放免费 | 国产成人高清亚洲一区久久 | 9191精品国产费久久 | 福利在线一区 | 亚洲骚色| 可以免费看污视频的网站 | 一区二区三区在线观看视频 | 久久国产精品视频 | 日本不卡视频 | 99久女女精品视频在线观看 | 国产对白91色拍高清精品 | 欧美不卡一区 | 四虎影剧院| 国内精品久久久久影院免费 | 黄色欧美视频在线观看 | 日韩欧美精品在线视频 | 91色交视频 | 国内精品免费麻豆网站91麻豆 | 亚洲一区二区影院 | 青青草国 | 4虎在线观看 | 青青草a | 免费国产成人 | 黄色片手机在线观看 | 亚洲一区欧美二区 | 欧美在线视频免费观看 | 免费一级毛片不卡在线播放 | 网友偷自拍原创区 | 久久婷婷午色综合夜啪 |