虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

[野火ISO]<b>零死角玩转stm32</b>

  • 玩转树莓派

    本资料介绍了在树莓派上快速安装与配置Linux服务器的方法,以及如何通过硬件开发对树莓派进行扩展以完成更多的任务。

    标签: 树莓派 Linux GPIO接口

    上传时间: 2022-07-24

    上传用户:aben

  • 通向FPGA之路-七天玩转Altera之时序篇

    网上关于Altera的教程很多,可谓浩如烟海。大体来说有两类:一是,step by step的指导如何操作Quartus软件,这类方法的优点是上手快,但却有知其然不知其所以然之惑;二是,从一个很高的起点分析一些具体问题,优点是有深度,但也把大部分初学者拒之门外,不知路在何方。本系列教程的宗旨是在力求全面介绍Altera及其QuartusⅡ软件原理的基础上,对何如使用Altera FPGA进行基础设计、时序分析、验证、优化四大方面进行讲解。本篇为时序篇,推荐用两天时间掌握。其余的,基础篇需一天,验证、优化各需两天,一共七天。本教程大部分内容参考翻译 altera 官方handbook和对应的paper等资料,1.2、1.4、1.6、2.1系热心网友riple所创,笔者基本原文引用,只为阅读流畅性和更易理解做了少许改动,如造成原作者的不适,可联系笔者删除之。后续教程视读者反映情况进行适当调整和发布。

    标签: fpga altera 时序

    上传时间: 2022-07-27

    上传用户:

  • 玩转TIMSP430 launchpad

    旁人也许很难理解我看到这本电子书时的欣喜。十年了,作为TIMSP430技术支持工程师中的一员,或许当初对这个选择还有些许的不确定,而现在我则庆幸当年的决定。的确,MSP430本身是一个相对简单易用的产品,而LaunchPad更是一块MSP430的敲门砖。然而这十年间,我看着一批又一批的人对MSP430从陌生到熟悉,从饶有兴趣到用其打造出真实的产品,从“小荷才露尖尖角”到企业成为国际上的领头羊……而他们中的一些人也已经从普通的工程师变身为技术总监,还有一些则跳出了研发的范畴,从事系统咨询等更高视角的工作。可以说,在为MSP430做支持的过程中,我收获了巨大的成就感,因为我看到的是中国电子产业的蓬勃发展、中国客户的进步、越来越多的青年才俊加入到电子设计的行业中,同时我也看到了TI的进步。MCU的发展对中国电子产业的重要性毋需多言,也许大家知道,TI的Jack Kirby是集成电路的发明人并因此获得了诺贝尔奖;但少有人知道,拥有第一件微处理器专利的公司是TI,TI的Gary Boone在1973年获得第一个单片微处理器的美国专利授权。这些年来,TI一直都在逐步加大对MCU产品的投入,而产品技术上的进步只是一个方面,更重要的是,TI在思考如何改变自己以适应客户的需求,如何让客户更成功。

    标签: timsp430

    上传时间: 2022-07-27

    上传用户:

  • 通向FPGA之路-七天玩转Altera之基础篇

    网上关于Altera的教程很多,可谓浩如烟海。大体来说有两类:一是,step by step的指导如何操作Quartus软件,这类方法的优点是上手快,但却有知其然不知其所以然之惑;二是,从一个很高的起点分析一些具体问题,优点是有深度,但也把大部分初学者拒之门外,不知路在何方。本系列教程的宗旨是在力求全面介绍Altera及其QuartusII软件原理的基础上,对何如使用AlteraFPGA进行基础设计、时序分析、验证、优化四大方面进行讲解。本篇为基础篇,推荐用一天时间掌握。还有三大类各需两天,一共七天。本教程大部分内容参考翻译 altera 官方handbook和对应的paper等资料,也有部分章节系热心网友所创,笔者基本原文引用,只为阅读流畅性做了少许改动,如造成原作者的不适,可联系笔者删除之。后续教程视读者反映情况进行适当调整和发布。

    标签: fpga altera

    上传时间: 2022-07-27

    上传用户:XuVshu

  • VIP专区-单片机源代码精选合集系列(7)

    eeworm.com VIP专区 单片机源码系列 7资源包含以下内容:1. STC-ISP-V4.83下载软件.rar2. 用模块化的思想来武装你的keil编程(二).zip3. 怎么样学好单片机.doc4. 用模块化的思想来武装你的keil编程(一).zip5. TL431反馈参数计算.zip6. 《电子制作与维修经验精华280例》.pdf7. 74ls164_动态驱动多位数码管.zip8. 自动量程电压电流表.rar9. keil软件编译常见错误解释总结和中文翻译.pdf10. TL431与PC817的设计应用.zip11. 2013电子设计大赛手写板G题.rar12. 瑞萨RL78/G13开发套件快速入门教材.pdf13. 双色点阵控制卡原理图PCB.zip14. 基于利用时钟芯片DS1302实现万年历,1602LCD显示电子表.doc15. 用键盘控制的LED灯.zip16. HOT-51增强版开发板使用说明.zip17. TLC2543 AD高精度转换c语言程序.zip18. 电工电子排故系统--按键扫描修改--两方法.zip19. 74HC164应用实例:驱动数码管两例(电路图和源程序).zip20. 基于C8051的步进电机按键控制.zip21. 小车循迹AVR版.rar22. 音乐彩灯控制器设计.zip23. C51Tip-如何使8051工程和开发过程变得简单.zip24. 八位数字密码锁设计资料.rar25. 在keil中添加STC型号的3种方法.zip26. 基于74HC164扩展单片机系统I_O端口的研究.zip27. H8群瑞萨单片机之间的IIC通信,通信程序代码.zip28. 出租车计价器(单片机c语言).doc29. PL2303 VISTA WIN7驱动.rar30. PIC16F1823_LF1823中文资料.pdf31. LPC21XX初始化工具.rar32. 单片机c语言全解.rar33. FY2005K编程器软件V3安装程序.rar34. 单片机c语言资料.zip35. AVR下载器设计progisp166.rar36. ST7920控制器系列中文字库液晶模块说明书.zip37. SouceInsight 技巧.doc38. 遥控避障寻线开发板.rar39. 单片机模块C程序大全.zip40. 内存烧写使用说明和烧录软件.rar41. The 8051 Microcontroller.pdf42. VideoStudio_Pro_v14.0.0.342_Keymaker_99D.COM.rar43. 基于STC12C5A60S2单片机的模拟路灯控制系统设计.zip44. USB转CAN上位机软件.rar45. EM3-V22原理图.pdf46. LPC210X定时器初始化小工具.rar47. msp430基础资料.rar48. 51单片播放三首音乐C程序.doc49. 51单片机遥控家电毕业设计.doc50. AVR单片机在智能公交车报站器中的应用.pdf51. LCD12864显示C程序.docx52. ZIGBEE遥控飞机电路图.rar53. LCD12864经典写数据.doc54. M8最小系统资料包.rar55. 电子设计竞赛培训-控制类.ppt56. LCD1602与PCF8591驱动程序组合.doc57. 智能小车pid算法.doc58. 51单片机Atmel_AT89S52库元件.zip59. LCD1602写数据函数.doc60. NUC120遥控板原理图.pdf61. 基于51单片机用PCF8591进行AD_DA转换用1602LCD显示的电流采样.doc62. LCD1602驱动程序改主程序.doc63. RL78G13开发套件_MCU板原理图.pdf64. TLC5615数模转换.docx65. LCD1602驱动程序.doc66. IAR FOR msp430 5.4破解.rar67. TCL1549AD液晶采样显示.doc68. 2013全国电子设计大赛AD9854全部资料,51单片机编程,fpga编程的各种波形发生器.rar69. 分享--基于STC单片机的LED轮廓显示控制器设计.pdf70. PCF8591写读数据.doc71. 430单片机—ads1115驱动.rar72. 0809共阳数字电压表.rar73. LCD12864写数据函数.docx74. MSP430G2系列单片机原理与实践教程完整版.pdf75. 12864串口显示显示程序.rar76. 实验19 LCD12864_串行方式.zip77. 40系列45系列集成芯片大集合.zip78. stc12c5a60s2内置AD.rar79. stc12c5a60s2内置EEPROM的用法.rar80. 基于单片机及AD9850的正弦信号发生器设计说明书.pdf81. stc12c5260s2 PWM输出.rar82. 实用的51单片机C语言编程实例.doc83. 巡光小车程序.rar84. 2013年全国电子设计竞赛预测题目.pdf85. 简单的51单片机电子时钟.doc86. GSM开发板第三版资料.rar87. 51汇编指令.zip88. 指纹识别模块用户手册.pdf89. ds1302与数码管时间可调.zip90. 超声波测距资料(HC-SR04)_TB.zip91. 手机液晶屏的资料(有接口说明).pdf92. MSP430+IR+LCD显示读出的键值.rar93. LCD12864源码及proteus仿真.rar94. 4x4矩阵按键控制.zip95. GY-32-MMA7361模块发送资料.rar96. AVR_TWI总线学习笔记.docx97. STC12C5A60S2液晶AD显示.doc98. 单片机学习入门心得.doc99. 51单片机玩转NRF24L01+.doc100. 单片机应用基础.rar

    标签: MATLAB 信号与 系统分析

    上传时间: 2013-05-15

    上传用户:eeworm

  • VIP专区-单片机源代码精选合集系列(39)

    eeworm.com VIP专区 单片机源码系列 39资源包含以下内容:1. 单片机项目-字符显示(LCD1602).rar2. 单片机项目19-电子日历(1602显示).rar3. 十天学会单片机和C语言编程.rar4. 单片机项目集.rar5. 项目实时时钟.zip6. Keil C51使用详解.rar7. efsl-0.2.8(sd card 文件系统 fat).rar8. MC9S12_datasheet中文.pdf9. uCOS-II vv2.8源码.rar10. 步进电机步距角细分单片机控制系统.pdf11. 智能小车制作.zip12. 单片机芯片资料.zip13. 存储器芯片资料.zip14. 51单片机C语言编程入门(中科大)(1).pdf15. 如何为keil c51编写自己display接口.zip16. PRJPCBStructure设计.rar17. 温度传感器液晶显示实验.rar18. 51单片机接入以太网.rar19. 基于软件仿真和硬件电路联调的单片机课程设计.pdf20. PIC单片机特殊指令助记符.zip21. 红外测温仪.rar22. PIC单片机宏汇编器MPASM指令表.zip23. 51单片机精简开发板.doc24. 单片机小编辑程序.rar25. ARM单片机入门.doc26. C8051F9xx_中文版.pdf27. 基于c51设计的交通灯.zip28. 超声波测距资料.rar29. PIC初学试题一(微型计算机概论习题).zip30. 51单片机学习总结.doc31. 智能汽车设计导论 第一部分.ppt32. PIC初学试题四(PIC指令系统习题).zip33. 自主移动机器人激光全局定位系统.pdf34. 第1章 智能汽车设计导论 第二部分.ppt35. PIC初学试题三(PIC存储器习题).zip36. AVR、51系列、PIC单片机的对比分析.doc37. 非理性因素分析与探讨.ppt38. PIC初学试题二(PIC单片机组成习题).zip39. 血压计中仪表放大器的设计与制作.rar40. 单片机项目和作品简介.doc41. 步进电机原理与控制简介.pdf42. C8051FXXX PCB design notes.pdf43. STC12C5A60S2系列单片机中文完全手册.pdf44. 基于单片机的步进电机控制器的设计论文.doc45. STC89C51单片机.doc46. PIC单片机C语言编程指南.pdf47. MC34018双音频电话芯片.pdf48. proteus使用指南.pdf49. DTMF电路HT9200A与单片机的接口.pdf50. Proteus_入门教程.pdf51. 51系列单片机资料.pdf52. 51单片机与双工及单工通信.rar53. 单片机技术应用实验实训指导.doc54. STM8S系列MCU功耗管理.pdf55. 电子密码锁单片机课程设计.doc56. Cortex-M0微控制器概述及性能分析.pdf57. 基于MSP430与DTMF技术的医院呼叫对讲系统的设计.rar58. 51单片机流水灯程序.rar59. Keil与proteus完美结合教程.pdf60. ARM入门.rar61. 2011年全国大学生电子设计大赛培训-基础知识.ppt62. 51芯片与ADc.rar63. 51芯片的82C55IO扩展.rar64. IBM-PC汇编语言程序设计(第五版).pdf65. DS12887A万年历PCB资料.pdf66. 智能可编程变速车.doc67. 51单片机100例.pdf68. 8段LED代码生成器.exe69. 51—52系列单片机特殊功能寄存器一览表.doc70. msp430单片机指令集.pdf71. 12864液晶中文资料.pdf72. ATmega8资料.pdf73. LT-1B msp430 程序原理图集合.rar74. 51单片机常用一些小软件.rar75. ICCAVR C编程语言系统中文说明书.pdf76. 8位数码管秒表程序.rar77. 基于FPGA的高速图像数据采集系统设计.pdf78. 单片机C语言程序设计实训100例——基于8051+Proteus仿真.pdf79. ATmega16资料.pdf80. 基于FPGA和面阵CCD摄像头的动态光谱数据采集与预处理.pdf81. STC89C51RC-RD+_GUIDE-CHINESE.pdf82. 单片机学习笔记.pdf83. AVR新手入门知识整理.pdf84. 单片机教材课件.doc85. 学习单片机总结宝典.pdf86. ATmega16芯片中文资料.pdf87. MCS-51单片机的40个实验电路原理图和程序设计.pdf88. 单片机的40个典型实验.doc89. AVR编程工具计算器.zip90. MSC-51单片机交通灯控制系统的研究.rar91. 《数字电路与逻辑设计》答案.rar92. 从单片机新手到工程师学习.zip93. 玩转12864液晶屏(ST7920).pdf94. STC12C5A60S2精简开发板使用手机及其经典例程.rar95. 12864详细中文资料.pdf96. stc-isp-v3.9正式版.rar97. 带汉字字库液晶屏字型码表.pdf98. ATmega16_cn(M16单片机资料).pdf99. MCS51单片机内存图.pdf100. C语言模块化编程(我见过最好的).pdf

    标签: 电磁铁 应用设计 计算方法

    上传时间: 2013-04-15

    上传用户:eeworm

  • 七天玩转Android视频培训课程(视频+代码+课件+课后练习)

    android-第0天.rar android-第1天.rar android-第2天.rar android-第3天.rar android-第4天.rar android-第5天.rar android-第6天.rar android-第7天.rar

    标签: Visual 游戏程序 光盘

    上传时间: 2013-04-15

    上传用户:eeworm

  • 简易负离子发生器的制作

      简易负离子发生器负离子增加,对人有催眠、止汗、镇痛、增进食欲,使人精神爽快,消除疲劳的作用。图1是负离子发生器电路图。220V交流市电经D1整流后向C3和C2充电,当C2充电至氖泡导通并触发SCR导通时,C3经SCR、B的L1放电,经B感应升压后,由D2反向整流得8kV直流高压使发生器M的分子电离而产生负离子。调整R3的阻值可以改变触发频率和输出电压。调整时必须注意安全,更换元件需拨下电源插头

    标签: 负离子发生器

    上传时间: 2013-10-29

    上传用户:731140412

  • TLC2543 中文资料

    TLC2543是TI公司的12位串行模数转换器,使用开关电容逐次逼近技术完成A/D转换过程。由于是串行输入结构,能够节省51系列单片机I/O资源;且价格适中,分辨率较高,因此在仪器仪表中有较为广泛的应用。 TLC2543的特点 (1)12位分辩率A/D转换器; (2)在工作温度范围内10μs转换时间; (3)11个模拟输入通道; (4)3路内置自测试方式; (5)采样率为66kbps; (6)线性误差±1LSBmax; (7)有转换结束输出EOC; (8)具有单、双极性输出; (9)可编程的MSB或LSB前导; (10)可编程输出数据长度。 TLC2543的引脚排列及说明    TLC2543有两种封装形式:DB、DW或N封装以及FN封装,这两种封装的引脚排列如图1,引脚说明见表1 TLC2543电路图和程序欣赏 #include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit clock=P1^0; sbit d_in=P1^1; sbit d_out=P1^2; sbit _cs=P1^3; uchar a1,b1,c1,d1; float sum,sum1; double  sum_final1; double  sum_final; uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar wei[]={0xf7,0xfb,0xfd,0xfe};  void delay(unsigned char b)   //50us {           unsigned char a;           for(;b>0;b--)                     for(a=22;a>0;a--); }  void display(uchar a,uchar b,uchar c,uchar d) {    P0=duan[a]|0x80;    P2=wei[0];    delay(5);    P2=0xff;    P0=duan[b];    P2=wei[1];    delay(5);   P2=0xff;   P0=duan[c];   P2=wei[2];   delay(5);   P2=0xff;   P0=duan[d];   P2=wei[3];   delay(5);   P2=0xff;   } uint read(uchar port) {   uchar  i,al=0,ah=0;   unsigned long ad;   clock=0;   _cs=0;   port<<=4;   for(i=0;i<4;i++)  {    d_in=port&0x80;    clock=1;    clock=0;    port<<=1;  }   d_in=0;   for(i=0;i<8;i++)  {    clock=1;    clock=0;  }   _cs=1;   delay(5);   _cs=0;   for(i=0;i<4;i++)  {    clock=1;    ah<<=1;    if(d_out)ah|=0x01;    clock=0; }   for(i=0;i<8;i++)  {    clock=1;    al<<=1;    if(d_out) al|=0x01;    clock=0;  }   _cs=1;   ad=(uint)ah;   ad<<=8;   ad|=al;   return(ad); }  void main()  {   uchar j;   sum=0;sum1=0;   sum_final=0;   sum_final1=0;    while(1)  {              for(j=0;j<128;j++)          {             sum1+=read(1);             display(a1,b1,c1,d1);           }            sum=sum1/128;            sum1=0;            sum_final1=(sum/4095)*5;            sum_final=sum_final1*1000;            a1=(int)sum_final/1000;            b1=(int)sum_final%1000/100;            c1=(int)sum_final%1000%100/10;            d1=(int)sum_final%10;            display(a1,b1,c1,d1);           }         } 

    标签: 2543 TLC

    上传时间: 2013-11-19

    上传用户:shen1230

  • 驱动程序与应用程序的接口

    有两种方式可以让设备和应用程序之间联系: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