有兩種方式可以讓設備和應用程序之間聯系:1. 通過為設備創建的一個符號鏈;2. 通過輸出到一個接口WDM驅動程序建議使用輸出到一個接口而不推薦使用創建符號鏈的方法。這個接口保證PDO的安全,也保證安全地創建一個惟一的、獨立于語言的訪問設備的方法。一個應用程序使用Win32APIs來調用設備。在某個Win32 APIs和設備對象的分發函數之間存在一個映射關系。獲得對設備對象訪問的第一步就是打開一個設備對象的句柄。 用符號鏈打開一個設備的句柄為了打開一個設備,應用程序需要使用CreateFile。如果該設備有一個符號鏈出口,應用程序可以用下面這個例子的形式打開句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路徑名的前綴“\\.\”告訴系統本調用希望打開一個設備。這個設備必須有一個符號鏈,以便應用程序能夠打開它。有關細節查看有關Kdevice和CreateLink的內容。在上述調用中第一個參數中前綴后的部分就是這個符號鏈的名字。注意:CreatFile中的第一個參數不是Windows 98/2000中驅動程序(.sys文件)的路徑。是到設備對象的符號鏈。如果使用DriverWizard產生驅動程序,它通常使用類KunitizedName來構成設備的符號鏈。這意味著符號鏈名有一個附加的數字,通常是0。例如:如果鏈接名稱的主干是L“TestDevice”那么在CreateFile中的串就該是“\\\\.\\TestDevice0”。如果應用程序需要被覆蓋的I/O,第六個參數(Flags)必須或上FILE_FLAG_OVERLAPPED。 使用一個輸出接口打開句柄用這種方式打開一個句柄會稍微麻煩一些。DriverWorks庫提供兩個助手類來使獲得對該接口的訪問容易一些,這兩個類是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass類封裝了一個設備信息集,該信息集包含了特殊類中的所有設備接口信息。應用程序能有用CdeviceInterfaceClass類的一個實例來獲得一個或更多的CdeviceInterface類的實例。CdeviceInterface類是一個單一設備接口的抽象。它的成員函數DevicePath()返回一個路徑名的指針,該指針可以在CreateFile中使用來打開設備。下面用一個小例子來顯示這些類最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface( GUID* pClassGuid, DWORD instance, PDWORD pError){ CDeviceInterfaceClass DevClass(pClassGuid, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; CDeviceInterface DevInterface(&DevClass, instance, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; cout << "The device path is " << DevInterface.DevicePath() << endl; HANDLE hDev; hDev = CreateFile( DevInterface.DevicePath(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (hDev == INVALID_HANDLE_VALUE) *pError = GetLastError(); return hDev;} 在設備中執行I/O操作一旦應用程序獲得一個有效的設備句柄,它就能使用Win32 APIs來產生到設備對象的IRPs。下面的表顯示了這種對應關系。Win32 API DRIVER_FUNCTION_xxxIRP_MJ_xxx KDevice subclass member function CreateFile CREATE Create ReadFile READ Read WriteFile WRITE Write DeviceIoControl DEVICE_CONTROL DeviceControl CloseHandle CLOSECLEANUP CloseCleanUp 需要解釋一下設備類成員的Close和CleanUp:CreateFile使內核為設備創建一個新的文件對象。這使得多個句柄可以映射同一個文件對象。當這個文件對象的最后一個用戶級句柄被撤銷后,I/O管理器調用CleanUp。當沒有任何用戶級和核心級的對文件對象的訪問的時候,I/O管理器調用Close。如果被打開的設備不支持指定的功能,則調用相應的Win32將引起錯誤(無效功能)。以前為Windows95編寫的VxD的應用程序代碼中可能會在打開設備的時候使用FILE_FLAG_DELETE_ON_CLOSE屬性。在Windows NT/2000中,建議不要使用這個屬性,因為它將導致沒有特權的用戶企圖打開這個設備,這是不可能成功的。I/O管理器將ReadFile和WriteFile的buff參數轉換成IRP域的方法依賴于設備對象的屬性。當設備設置DO_DIRECT_IO標志,I/O管理器將buff鎖住在存儲器中,并且創建了一個存儲在IRP中的MDL域。一個設備可以通過調用Kirp::Mdl來存取MDL。當設備設置DO_BUFFERED_IO標志,設備對象分別通過KIrp::BufferedReadDest或 KIrp::BufferedWriteSource為讀或寫操作獲得buff地址。當設備不設置DO_BUFFERED_IO標志也不設置DO_DIRECT_IO,內核設置IRP 的UserBuffer域來對應ReadFile或WriteFile中的buff參數。然而,存儲區并沒有被鎖住而且地址只對調用進程有效。驅動程序可以使用KIrp::UserBuffer來存取IRP域。對于DeviceIoControl調用,buffer參數的轉換依賴于特殊的I/O控制代碼,它不在設備對象的特性中。宏CTL_CODE(在winioctl.h中定義)用來構造控制代碼。這個宏的其中一個參數指明緩沖方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表顯示了這些方法和與之對應的能獲得輸入緩沖與輸出緩沖的KIrp中的成員函數:Method Input Buffer Parameter Output Buffer Parameter METHOD_BUFFERED KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代碼指明METHOD_BUFFERED,系統分配一個單一的緩沖來作為輸入與輸出。驅動程序必須在向輸出緩沖放數據之前拷貝輸入數據。驅動程序通過調用KIrp::IoctlBuffer獲得緩沖地址。在完成時,I/O管理器從系統緩沖拷貝數據到提供給Ring 3級調用者使用的緩沖中。驅動程序必須在結束前存儲拷貝到IRP的Information成員中的數據個數。如果控制代碼不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,則DeviceIoControl的參數呈現不同的含義。參數InputBuffer被拷貝到一個系統緩沖,這個緩沖驅動程序可以通過調用KIrp::IoctlBuffer。參數OutputBuffer被映射到KMemory對象,驅動程序對這個對象的訪問通過調用KIrp::Mdl來實現。對于METHOD_OUT_DIRECT,調用者必須有對緩沖的寫訪問權限。注意,對METHOD_NEITHER,內核只提供虛擬地址;它不會做映射來配置緩沖。虛擬地址只對調用進程有效。這里是一個用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE來定義一個IOCTL代碼:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)現在使用一個DeviceIoControl調用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING, NULL, // no input 注意,這里放的是包含有執行操作命令的字符串指針 0, FirmwareRev, //這里是output串指針,存放從驅動程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize, NULL // not overlapped I/O );如果輸出緩沖足夠大,設備拷貝串到里面并將拷貝的資結束設置到FirmwareRevSize中。在驅動程序中,代碼看起來如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){ ULONG fwLength=0; switch ( I.IoctlCode() ) { case IOCTL_MYDEV_GET_FIRMWARE_REV: fwLength = strlen(FIRMWARE_REV)+1; if (I.IoctlOutputBufferSize() >= fwLength) { strcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV); I.Information() = fwLength; return I.Complete(STATUS_SUCCESS); } else { } case . . . } }
上傳時間: 2013-10-17
上傳用戶:gai928943
ICCAVR中文使用說明:ICCAVR 介紹1 ImageCraft 的ICCAVR 介紹ImageCraft 的ICCAVR 是一種使用符合ANSI 標準的C 語言來開發微控制器MCU程序的一個工具它有以下幾個主要特點ICCAVR 是一個綜合了編輯器和工程管理器的集成工作環境IDE 其可在WINDOWS9X/NT 下工作源文件全部被組織到工程之中文件的編輯和工程的構筑也在這個環境中完成編譯錯誤顯示在狀態窗口中并且當你用鼠標單擊編譯錯誤時光標會自動跳轉到編輯窗口中引起錯誤的那一行這個工程管理器還能直接產生您希望得到的可以直接使用的INTELHEX 格式文件INTEL HEX 格式文件可被大多數的編程器所支持用于下載程序到芯片中去ICCAVR 是一個32 位的程序支持長文件名出于篇幅考慮本說明書并不介紹通用的C 語言語法知識僅介紹使用ICC AVR 所必須具備的知識因此要求讀者在閱讀本說明書之前應對C 語言有了一定程度的理解2 ICCAVR 中的文件類型及其擴展名文件類型是由它們的擴展名決定的IDE 和編譯器可以使用以下幾種類型的文件輸入文件.c 擴展名----表示是C 語言源文件.s 擴展名----表示是匯編語言源文件.h 擴展名----表示是C 語言的頭文件.prj 擴展名----表示是工程文件這個文件保存由IDE 所創建和修改的一個工程的有關信息.a 擴展名----庫文件它可以由幾個庫封裝在一起libcavr.a 是一個包含了標準C 的庫和AVR 特殊程序調用的基本庫如果庫被引用鏈接器會將其鏈接到您的模塊或文件中您也可以創建或修改一個符合你需要的庫輸出文件.s 對應每個C 語言源文件由編譯器在編譯時產生的匯編輸出文件.o 由匯編文件匯編產生的目標文件多個目標文件可以鏈接成一個可執行文件.hex INTEL HEX 格式文件其中包含了程序的機器代碼.eep INTEL HEX 格式文件包含了EEPROM 的初始化數據.cof COFF 格式輸出文件用于在ATMEL 的AvrStudio 環境下進行程序調試.lst 列表文件在這個文件中列舉出了目標代碼對應的最終地址.mp 內存映象文件它包含了您程序中有關符號及其所占內存大小的信息.cmd NoICE 2.xx 調試命令文件.noi NoICE 3.xx 調試命令文件.dbg ImageCraft 調試命令文件
上傳時間: 2013-10-29
上傳用戶:truth12
隨著單片機性能不斷提高而價格卻不斷下降, 單片機控制在越來越多的領域得以應用。按照傳統的模式, 在整個項目開發過程中, 先根據控制系統要求設計原理圖, PCB 電路圖繪制, 電路板制作, 元器件的焊接, 然后進行軟件編程, 通過仿真器對系統硬件和軟件調試, 最后將調試成功的程序固化到單片機中。這一過程中的主要問題是, 應用程序需要在硬件完成的情況下才能進行調試。雖然有的軟件可以進行模擬調試, 但是對于一些復雜的程序如人機交互程序, 在沒有硬件的時候, 沒有界面的真實感, 給調試帶來困難。在軟硬件的配合中如需要修改硬件, 要重新制板, 在時間和投入上帶來很大的麻煩。縱觀整個過程, 無論是從硬件成本上, 還是從調試周期上, 傳統開發模式的效率有待提高。能否只使用一種開發工具兼顧仿真, 調試, 制板, 以及最大限度的軟件模擬來作為單片機的開發平臺, 用它取代編程器、仿真器、成品前的硬件測試等工作是廣大單片機開發者的夢想。 PROTEUS 軟件介紹為了更加直觀具體地說明Proteus 軟件的實用價值, 本文以一具體的TAXI 的計價器和計時器電路板的設計過程為例。其電路板要實現的功能是:㈠計時功能(相當于時鐘);㈡里程計價功能:兩公里以內價格為4 元, 以后每一公里加0.7 元, 不足一公里取整(如10.3 公里取11 公里);㈢通過鍵盤輸入里程, 模擬計算里程費, 實現Y= (X- 2)*0.7+4 的簡單計算?;谏鲜龉δ? 選用ATMEL 公司生產的通用芯片AT89C51 單片機構成應用系統。AT89C51 是內含8 位4K 程序存儲器, 128B 數據存儲器, 2 個定時器/計數器的通用芯片。系統開發環境采用ProteusISIS 6。2.1 計價器模擬系統硬件構成系統主要由一個AT89C51 單片機、74LS373、74LS240、矩陣鍵盤、4 位7 段數碼管等組成。通用AT89C51 單片機芯片作為整個電路的核心部分、74LS373 作為LED 段選控制、74LS240四路反相器則為4 位共陰極7 段數碼管提供位選通信號、矩陣鍵盤輸入控制信號。
上傳時間: 2013-11-09
上傳用戶:木子葉1
TMS320LF240x DSP 課件
標簽: 管理器
上傳時間: 2013-11-04
上傳用戶:王成林。
載波相移正弦脈寬調制(SPWM)技術是一種適用于大功率電力開關變換裝置的高性能開關調制策略,在有源電力濾波器中有良好的應用前景。本文介紹了如何利用高性能數字信號處理器TMS320F28335的片內外設事件管理器(EV)模塊產生三相SPWM波,給出了程序流程圖及關鍵程序源碼。該方法采用不對稱規則采樣算法,參數計算主要采用查表法,計算量小,實時性高。在工程實踐中表明,該方法既能滿足控制精度要求,又能滿足實時性要求,可以很好地控制逆變電源的輸出。
上傳時間: 2013-11-05
上傳用戶:tzrdcaabb
課堂上聽完老師講完DSP2407之后,來一次較系統的總復習,文中列出了DSP2407概述;系統概貌: 系統配置和中斷、存儲器和I/O空間、時鐘和低功耗模式、數字輸入輸出;片內外設: 事件管理器、ADC、SCI、SPI、CAN、WD 系統開發和基于C語言的軟件設計等章節的重點和難點。
上傳時間: 2013-10-11
上傳用戶:changeboy
c#數據庫開發實例:有很多的實例,對學習非常的有意義! 酒店管理系統源代碼 醫院信息管理系統源代碼 圖書館管理系統源代碼 財務管理系統源代碼 生產管理系統源代碼 人力資源管理實例程序源代碼 進銷存管理實例程序源代碼 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[采購訂單_供貨商_fk]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1) ALTER TABLE [dbo].[采購訂單] DROP CONSTRAINT 采購訂單_供貨商_fk GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[采購訂單歷史_供貨商_fk]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1) ALTER TABLE [dbo].[采購訂單歷史] DROP CONSTRAINT 采購訂單歷史_供貨商_fk
上傳時間: 2013-10-30
上傳用戶:392210346
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[采購訂單_供貨商_fk]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1) ALTER TABLE [dbo].[采購訂單] DROP CONSTRAINT 采購訂單_供貨商_fk GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[采購訂單歷史_供貨商_fk]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1) ALTER TABLE [dbo].[采購訂單歷史] DROP CONSTRAINT 采購訂單歷史_供貨商_fk GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[采購合同_供貨商_fk]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1) ALTER TABLE [dbo].[采購合同] DROP CONSTRAINT 采購合同_供貨商_fk GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[進貨單_供貨商_fk]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1) ALTER TABLE [dbo].[進貨單] DROP CONSTRAINT 進貨單_供貨商_fk
上傳時間: 2013-11-15
上傳用戶:wkxiian
SolidWorks2010中文版下載地址 SolidWorks是第一個基于Windows開發的三維CAD系統,功能強大,組件繁多。能根據為用戶不同需要提供不同的設計方案,此教程由軟件自學網首發,此教程由軟件自學網首發,從而減少設計過程中的錯誤進一步提高產品質量。功能完善、上手容易和技術領先是SolidWorks軟件的三大特點,這使得SolidWorks 成為了世界領先的三維CAD解決方案。 SolidWorks公司成立于1993年,1997年被法國達索公司收購,總部在馬薩諸塞州的康克爾郡內。SolidWorks成立之初目標是希望為工程師提供一套高效率的三維模型設計系統。1995年推出了第一套SolidWorks三維模型設計軟件,如今SolidWorks在全球各地都有辦事處。有300家經銷商在世界上為SolidWorks公司服務。SolidWorks2010中文版已成為達索在中端市場的主流品牌,是目前市場上常見三維設計軟件中使用最簡單方便的軟件之一,并被成為windows平臺三維CAD軟件中最著名的品牌,是是市場快速增長的領導者。 SolidWorks采用窗口式設計,只要是熟悉Windows系統的用戶,基本上就可以用SolidWorks來進行設計了。SolidWorks具有拖拽、剪切、復制等于windows相類似的功能,軟件所提供的特征模版為標準件設計提供了良好的環境。用戶可以直接從特征模版上調用標準件,并能與他人共享,這樣用戶就可以在短時間內完成大型機械裝配與設計。SolidWorks資源管理器和Windows資源管理器十分相似,可以用來管理CAD文件。使用SolidWorks 后用戶可以在相同的時間內完成更多的工作,可以更快速地將產品投放市場。
標簽: SolidWorks 2010
上傳時間: 2013-10-28
上傳用戶:TF2015
3dmax9.0 — 全世界最知名的3D動畫制作軟件 ,最新版本 3dmax9.0 已經于去年7月底在圣地牙哥正式發布了!3dmax9.0一直在動畫市場上占有非常重要的地位,尤其在電影特效、游戲軟件開發的領域里,discreet不斷在改造出更具強大功能與相容性的軟件來迎接這個新的視覺傳播世代。 你可以在3dmax9.0最新版中,看到3dmax9.0如何幫助設計師與動畫師更精準的掌握動畫背景與人物結構,同時呈現出每個角色震撼的生命力.。 3dmax9.0 根據包括SEGA在內用戶的要求,加強了游戲和電影特效的功能。 3dmax9.0 部分新功能如下:高級列表功能,查看和管理復雜場景。新軟件包括了新的mental ray渲染器和可視工具。對Autodesk的CAD支持更好。分布式網絡材質成型。創建現實的霧、雪、噴泉、彈著點等的質點流量系統。 3dmax9.0 新功能將包括: 高級瀏覽器,可以隨時觀看圖片文件和max文件; 復雜的場景管理器用來管理大的場景; 整合的mental ray渲染器可以渲染出非常高質量的圖片和動畫、 頂點顏色繪制(vertex color painting); design visualization tools; 支持CAD、 動力學版本是reactor 2 ; distributed network texture baking; 3dmax9.0還增加了一些材質并整合了部分舊版本中常用的材質。除此之外,3dmax9.0為mental ray渲染器增添了多種材質。包括:DGS Material(physics_phen)、Glass(physics_phen)和mental ray 總的來說3dmax9.0的功能非常強大。
上傳時間: 2013-10-22
上傳用戶:181992417