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

存储器

存储器单元实际上是时序逻辑电路的一种。按存储器的使用类型可分为只读存储器(ROM)和随机存取存储器(RAM),两者的功能有较大的区别,因此在描述上也有所不同[1]。
  • 驱动程序与应用程序的接口

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

  • PIC单片机基础知识

    ◆ PIC系列单片机简介 ◆ PIC系列单片机程序设计基础 ◆ PIC 8位单片机的分类和特点(一) ◆ PIC 8位单片机的分类和特点(二) ◆ PIC系列单片机的振荡器配置方法 ◆ PIC 8位单片机的基本组成 ◆ PIC 8位单片机的汇编语言 ◆ PIC 8位单片机16F8X系列简介 ◆ PIC 8位8脚单片机12C5××和12CE5××系列的特点 ◆ PIC 8位单片机的电源和时钟 ◆ 常用PIC系列8位单片机芯片引脚符号的功能 ◆ PIC 8位单片机16C6×系列简介 ◆ PIC 8位单片机汇编语言常用指令的识读(上) ◆ PIC 8位单片机汇编语言常用指令的识读(中) ◆ PIC 8位单片机汇编语言常用指令的识读(下) ◆ 浅谈PIC 8位单片机中的RAM和汇编程序的关系 ◆ 选择PIC单片机存储体0或1的方法 ◆ PIC系列8位单片机源程序的组成 ◆ PIC系列单片机的伪指令 ◆ PIC 8位单片机指令识读技巧 ◆ PIC16C84单片机介绍 ◆ PIC16C54单片机原理及应用 ◆ PIC单片机开发的若干问题 ◆ 小议编写PIC单片机源程序应注意的问题 ◆ PIC16C64单片机外部功能特点  ◆ PIC单片机16F84的内部硬件资源(一) ◆ PIC单片机16F84的内部硬件资源(二) ◆ PIC单片机16F84的内部硬件资源(三) ◆ PIC单片机16F84的内部硬件资料(四) ◆ PIC单片机16F84的内部硬件资源(五) ◆ PIC单片机16F84的内部硬件资源(六) ◆ PIC单片机16F84的内部硬件资源(七) ◆ PIC单片机16F84的内部硬件资源(八) ◆ PIC单片机程序设计的基本格式 ◆ PIC系列单片机数据存储器的特点和功能(上) ◆ PIC系列单片机数据存储器的特点和功能(中) ◆ PIC系列单片机数据存储器的特点和功能(下) ◆ PIC8位单片机新产品的特点和功能 ◆ Windows下PIC8位单片机源程序汇编和固化(一) ◆ Windows下PIC 8位单片机源程序汇编和固化(二) ◆ Windows下PIC 8位单片机源程序汇编和固化(三) ◆ Windows下PIC 8位单片机源程序汇编和固化(四) ◆ Windows下PIC 8位单片机源程序汇编和固化(五) ◆ Windows下PIC 8位单片机源程序汇编和固化(六) ◆ Wineows下PIC 8位单片机源程序汇编和固化(七)

    标签: PIC 单片机 基础知识

    上传时间: 2014-01-21

    上传用户:时代电子小智

  • 单片机原理与应用教程

    单片机原理与应用教程采用教、学、做相结合的模,以理论为基础、着眼应用,系统详尽地介绍了单片机应用技术所需的基本知识和技能。全书共分9章,包括MCS-51系列单片机的硬件结构、工作原理、指令系统、接口技术、串行通信、中断系统、语言程序设计及各功能部件的组成和应用等。通过学习这些内容,可对MCS-51系列单片机有一个总体的概念和认识,并在掌握基本硬件的基础上用软件实现其功能。 第1章 MCS-51单片机系统结构1.1 单片机概述1.2 MCS-51单片机结构简介1.3 并行I/O接口1.4 单片机的复位电路与时钟电路1.5 单片机的工作方式1.6 构建MCS-51型单片机的最小系统本章小结习题第2章 MCS-51指令系统与程序设计2.1 概述2.2 寻址方式2.3 指令系统2.4 汇编程序设计本章小结 习题第3章 单片机的定时与中断系统3.1 定时器/计数器3.2 中断系统3.3 单片机中断与定时器/计数器的应用训练本章小结习题第4章 串行通信技术4.1 串行通信概念4.2 MCS-51串行通信接口4.3 串行口的扩展应用4.4 串行通信的应用本章小结习题第5章 单片机的系统扩展技术5.1 程序存储器的扩展5.2 数据存储器的扩展5.3 TTL芯片扩展I/O并行接口的应用训练5.4 Intel系列可编程序接口芯片5.5 8155/8156可编程I/O接口应用训练5.6 8253/8254可编程定时器/计数器的应用训练……第6章 单片机接口实用技术及应用第7章 单片机开发系统第8章 单片机应和系统的设计方法第9章 单片机高级语言C51的应用

    标签: 单片机原理 应用教程

    上传时间: 2013-10-28

    上传用户:tzrdcaabb

  • 中断技术

    一个完整的微机系统是由硬件和软件共同构成的。微机系统的硬件有CPU、存储器和I/O口,外设组成。CPU与存储器之间的信息交换比较简单,而CPU与外设之间进行信息交换之前必须确定外设是否准备好,即选择I/O传送方式。I/O传送方式有4种:无条件、查询、中断和DMA。本章学习中断传送方式的有关内容。                                       4.1  中断概述                                   4.2  MCS-51中断系统   1、中断的定义:        中断是指如下过程:CPU与外设同时工作,CPU执行主程序,外设做准备工作,当外设准备好时向CPU发中断请求信号,若条件满足,则CPU终止主程序的执行,转去执行中断服务程序,在中断服务程序中CPU与外设交换信息,待中断服务程序执行完后,CPU再返回刚才终止的主程序继续执行。 2、中断系统的定义:中断系统是指为了实现中断传送过程在CPU内外设置的硬件和有关中断的指令。3、中断源:⑴中断源的定义:中断源是指引起中断请求的来源。⑵中断源的分类: ①软中断和 ②硬中断4、中断处理的全过程       中断处理的全过程分成3个阶段:中断请求、中断响应和中断服务。5、多重中断与中断优先级      ⑴ 当系统中有多个设备提出中断请求时,多个外设的中请信号要通过门电路送到CPU的中请输入端,使CPU能收到多个外设提出的中请。     ⑵ CPU在收到多个外设的请求后,按中断处理原则处理中断。     ⑶  确定优先级的方法解决优先级的问题一般可有三种方法:软件查询法、简单硬件方法及专用硬件方法(采用可编程的中断控制器芯片,如Intel8259A)。

    标签: 中断技术

    上传时间: 2013-10-12

    上传用户:ysjing

  • 接口技术概述

    1.1  微机系统的组成 1.1.1  微机系统的硬件组成1.1.2  单片机系统的硬件组成1.1.3  微机系统的软件组成1.2   MCS-51系列单片机1.2.1  MCS-51系列单片机的分类常用的MCS51系列单片机有2种类型的产品:8051/8751/89C51和8031。它们的结构基本相同,其主要差别反映在存储器的配置上的不同:       ①   8051内设有4KB的掩膜ROM。       ②   8751内设有4KB的EPROM。       ③   89C51内设有4KB的E2PROM 。       ④   8031内没有ROM。 1.2.2  MCS- 51系列单片机的结构1.2.3  MCS- 51系列单片机的引脚

    标签: 接口技术

    上传时间: 2013-11-24

    上传用户:wmwai1314

  • MCS-51系列单片机的结构和原理

    2.1  MCS-51系列单片机概述 2.1.1  MCS - 51系列单片机的基本结构单片机是一个大规模集成电路芯片,其上集成有CPU、存储器、I/O口(串行口、并行口)、其它辅助电路(如中断系统,定时/计数器,振荡电路及时钟电路等)。      其基本结构框图如下:     2.1.2  MCS - 51系列单片机的分类2.2   89C51单片机内部结构 2.3   89C51单片机的引脚 2.4   MCS-51系列单片机的工作方式

    标签: MCS 51 单片机

    上传时间: 2013-10-09

    上传用户:18165383642

  • 微型计算机总线知识

    计算机部件要具有通用性,适应不同系统与不同用户的需求,设计必须模块化。计算机部件产品(模块)供应出现多元化。模块之间的联接关系要标准化,使模块具有通用性。模块设计必须基于一种大多数厂商认可的模块联接关系,即一种总线标准。总线的标准总线是一类信号线的集合是模块间传输信息的公共通道,通过它,计算机各部件间可进行各种数据和命令的传送。为使不同供应商的产品间能够互换,给用户更多的选择,总线的技术规范要标准化。总线的标准制定要经周密考虑,要有严格的规定。总线标准(技术规范)包括以下几部分:机械结构规范:模块尺寸、总线插头、总线接插件以及按装尺寸均有统一规定。功能规范:总线每条信号线(引脚的名称)、功能以及工作过程要有统一规定。电气规范:总线每条信号线的有效电平、动态转换时间、负载能力等。总线的发展情况S-100总线:产生于1975年,第一个标准化总线,为微计算机技术发展起到了推动作用。IBM-PC个人计算机采用总线结构(Industry Standard Architecture, ISA)并成为工业化的标准。先后出现8位ISA总线、16位ISA总线以及后来兼容厂商推出的EISA(Extended ISA)32位ISA总线。为了适应微处理器性能的提高及I/O模块更高吞吐率的要求,出现了VL-Bus(VESA Local Bus)和PCI(Peripheral Component Interconnect,PCI)总线。适合小型化要求的PCMCIA(Personal Computer Memory Card International Association)总线,用于笔记本计算机的功能扩展。总线的指标计算机主机性能迅速提高,各功能模块性能也要相应提高,这对总线性能提出更高的要求。总线主要技术指标有几方面:总线宽度:一次操作可以传输的数据位数,如S100为8位,ISA为16位,EISA为32位,PCI-2可达64位。总线宽度不会超过微处理器外部数据总线的宽度。总数工作频率:总线信号中有一个CLK时钟,CLK越高每秒钟传输的数据量越大。ISA、EISA为8MHz,PCI为33.3MHz, PCI-2可达达66.6MHz。单个数据传输周期:不同的传输方式,每个数据传输所用CLK周期数不同。ISA要2个,PCI用1个CLK周期。这决定总线最高数据传输率。5. 总线的分类与层次系统总线:是微处理器芯片对外引线信号的延伸或映射,是微处理器与片外存储器及I/0接口传输信息的通路。系统总线信号按功能可分为三类:地址总线(Where):指出数据的来源与去向。地址总线的位数决定了存储空间的大小。系统总线:数据总线(What)提供模块间传输数据的路径,数据总线的位数决定微处理器结构的复杂度及总体性能。控制总线(When):提供系统操作所必需的控制信号,对操作过程进行控制与定时。扩充总线:亦称设备总线,用于系统I/O扩充。与系统总线工作频率不同,经接口电路对系统总统信号缓冲、变换、隔离,进行不同层次的操作(ISA、EISA、MCA)局部总线:扩充总线不能满足高性能设备(图形、视频、网络)接口的要求,在系统总线与扩充总线之间插入一层总线。由于它经桥接器与系统总线直接相连,因此称之为局部总线(PCI)。

    标签: 微型计算机 总线

    上传时间: 2013-11-09

    上传用户:nshark

  • 微机原理及接口技术课件(教学)

    微机原理及接口技术课件:微机:IBM PC系列机原理:8088汇编语言程序设计接口:半导体存储器及其接口, I/O接口电路及其与外设连接技术:硬件--接口电路原理 软件--接口编程方法第1章 基础知识 4第2章 微型计算机系统结构 6第3章 程序加载并执行 4第4章 微处理器一般指令 6第5章 汇编语言程序设计基础 4第6章 算术运算与逻辑运算 8第7章 基本输入与输出 4第8章 程序流程控制 10第9章 字符串处理 6第10章 宏  4第11章 过程 4第12章 文件处理 4第13章 模块化程序设计 4

    标签: 微机原理 接口技术

    上传时间: 2013-10-18

    上传用户:blacklee

  • 8086总线操作、中断系统及总线请求

    8086总线操作:8086微处理器与片外存储器或I/O接口进行数据传输时,经BIU执行8086规定的总线操作。总线周期的组成:8086的基本总线周期为4个时钟周期,每个时钟周期间隔称为一个T状态。8086的中断系统:8086微处理器可处理256种中断。8086对外部硬件中断请求INTR的响应:      当INTR有一高电平,即有可屏蔽中断请求。若此时IF=1且当前指令执行完,进入中断响应周期,处理过程如下:INTA#在两个总线周期中分别发出有效信号,第二周期中8086读到中断类型码保护现场:标志寄存器入栈,清除IF和TF标志位,保护断点(下一条指令地址入栈)。8086总线请求:在一个系统中,若存在多个可控制总线的主模块时,总线使用权的转移存在着一个请求与响应的过程。

    标签: 8086 总线 中断系统 操作

    上传时间: 2013-10-21

    上传用户:皇族传媒

  • 8253计数器定时器结构与编程

    可编程计数器/定时器的特点计算机及电子系统中需要定时信号,如系统的日历时钟,动态存储器的刷新,应用系统的定时中断、定时查询与检测等。可编程定时器芯片可以产生精确的时间间隔,形成各种脉冲序列,灵活性强。依所需时间间隔,设置计数器的时间常数,在一外部脉冲驱动下进行减1计数,计数值为0时,产生输出信号,供系统使用。

    标签: 8253 计数器 定时器 编程

    上传时间: 2013-11-17

    上传用户:彭玖华