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

系统级<b>封装</b>

  • 基于ARM的全数字B型超声诊断仪的设计与研究

    超声理论与技术的快速发展,使超声设备不断更新,超声检查已成为预测和评价疾病及其治疗结果不可缺少的重要方法。超声诊断技术不仅具有安全、方便、无损、廉价等优点,其优越性还在于它选用诊断参数的多样性及其在工程上实现的灵活性。 全数字B超诊断仪基于嵌入式ARM9+FPGA硬件平台、LINUX嵌入式操作系统,是一种新型的、操作方便的、技术含量高的机型。它具有现有黑白B超的基本功能,能够对超声回波数据进行灵活的处理,从而使操作更加方便,图象质量进一步提高,并为远程医疗、图像存储、拷贝等打下基础,是一种很有发展前景、未来市场的主打产品。全数字B型超声诊断仪的基本技术特点是用数字硬件电路来实现数据量极其庞大的超声信息的实时处理,它的实现主要倚重于FPGA技术。现在FPGA已经成为多种数字信号处理(DSP)应用的强有力解决方案。硬件和软件设计者可以利用可编程逻辑开发各种DSP应用解决方案。可编程解决方案可以更好地适应快速变化的标准、协议和性能需求。 本论文首先阐述了医疗仪器发展现状和嵌入式计算机体系结构及发展状况,提出了课题研究内容和目标。然后从B超诊断原理及全数字B超诊断仪设计入手深入分析了B型超声诊断仪的系统的硬件体系机构。对系统的总体框架和ARM模块设计做了描述后,接着分析了超声信号进行数字化处理的各个子模块、可编程逻辑器件的结构特点、编程原理、设计流程以及ARM处理模块和FPGA模块的主要通讯接口。接着,本论文介绍了基于ARM9硬件平台的LINUX嵌入式操作系统的移植和设备驱动的开发,详细描述了B型超声诊断仪的软件环境的架构及其设备驱动的详细设计。最后对整个系统的功能和特点进行了总结和展望。

    标签: ARM 全数字 仪的设计 超声诊断

    上传时间: 2013-05-28

    上传用户:sssnaxie

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

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

  • 98年全国大学生数学建模竞赛B题“水灾巡视问题”

    98年全国大学生数学建模竞赛B题“水灾巡视问题”,是一个推销员问题,本题有53个点,所有可能性大约为exp(53),目前没有好方法求出精确解,既然求不出精确解,我们使用模拟退火法求出一个较优解,将所有结点编号为1到53,1到53的排列就是系统的结构,结构的变化规则是:从1到53的排列中随机选取一个子排列,将其反转或将其移至另一处,能量E自然是路径总长度。具体算法描述如下:步1: 设定初始温度T,给定一个初始的巡视路线。步2 :步3 --8循环K次步3:步 4--7循环M次步4:随机选择路线的一段步5:随机确定将选定的路线反转或移动,即两种调整方式:反转、移动。步6:计算代价D,即调整前后的总路程的长度之差步7:按照如下规则确定是否做调整:如果D0,则按照EXP(-D/T)的概率进行调整步8:T*0.9-->T,降温

    标签: 大学生 数学建模 巡视 竞赛

    上传时间: 2015-03-14

    上传用户:himbly

  • B/s结构

    B/s结构,采用 asp.net(C#)+ MS SQL 编写。严格按照三层结构,不失为学习 C#的好例子。安泰OA办公系统自动化系统

    标签:

    上传时间: 2015-03-22

    上传用户:yzy6007

  • Haskell 中文教程1-3章(flw译) 纯粹的函数型编程语言。以著名逻辑学家 Haskell B. Curry 的名字命名。 最初的目的是想要设计出满足下面这些要求的语言: 1

    Haskell 中文教程1-3章(flw译) 纯粹的函数型编程语言。以著名逻辑学家 Haskell B. Curry 的名字命名。 最初的目的是想要设计出满足下面这些要求的语言: 1,它必须能够适合教学、研究、应用开发,包括一些大系统的构造。 2,它必须能够使用形式语言来准确描述。 3,它必须是自由免费的,任何人只要愿意都可以获取、使用和再次发布它。 4,它必须建立在大家一致认可的基础上。 5,它应该能够消除目前的函数型编程语言的差异。

    标签: Haskell B. Curry flw

    上传时间: 2014-01-10

    上传用户:685

  • hilon B协议编程

    hilon B协议编程,已在电力上CAN总线系统上应用,开发环境16位单片机

    标签: hilon 协议 编程

    上传时间: 2014-11-27

    上传用户:独孤求源

  • Ma tla b 是当今使用最为广泛的数学软件

    Ma tla b 是当今使用最为广泛的数学软件,它具有相当强大的数值计算、数据处理、系统 分析、图形显示、甚至符号运算功能,是一个完整的数学平台,但是它不能实现端口操作和 实时控制Borland C + +Builder是一种新颖的可视化编程语言,可方便实现交互界面、数据 采集和端口操作等,但是它在数值处理分析和算法工具等方面,效率远远低于Matlab语言

    标签: tla Ma 数学软件

    上传时间: 2014-01-24

    上传用户:牛津鞋

  • a.本程序在Windows xp 上调试通过。 b.在使用时先用ODBC注册数据源

    a.本程序在Windows xp 上调试通过。 b.在使用时先用ODBC注册数据源,数据源名:addresslist(名称不可以写错) c.第一次运行时,密码为空。进入系统后可以修改密码。

    标签: a. b. Windows ODBC

    上传时间: 2015-12-09

    上传用户:sjyy1001

  • )一个PB的应用程序, 能实现以下功能: a.新增员工资料 b.修改员工资料 c.删除员工资料 d.按姓名查找员工资料(能模糊查找, 例如输入"林", 则所有姓或名中含有"林"字的

    )一个PB的应用程序, 能实现以下功能: a.新增员工资料 b.修改员工资料 c.删除员工资料 d.按姓名查找员工资料(能模糊查找, 例如输入"林", 则所有姓或名中含有"林"字的 员工全列出来.) e.系统启动时, 针对今天为该员工生日的, 则自动弹出提示进行祝福. 2) 员工资料的数据必须有: 工号(为主键), 姓名, 出生日期, 入职日期, 部门, 职务 3) 数据库类型为ASA8.0

    标签: a. b. c. d.

    上传时间: 2016-01-03

    上传用户:BIBI

  • 结合单片机和M a t l a b 两者的优点

    结合单片机和M a t l a b 两者的优点,基于事件驱动的中断通信机制,提出一种Matlab 环境下PC 机与 单片机实时串行通信及数据处理的方法;完成单片机数据采集系统与PC 机的RS-232/RS-485 串行通 信及其通信数据的分析处理、文件存储、F I R 滤波及图形显示;简化系统开发流程,提高开发效率。 该方法已成功应用于一个P I C 1 6 F 8 7 6 单片机应用系统实例之中

    标签: 单片机

    上传时间: 2014-01-19

    上传用户:yzy6007