基于WDF驱动开发的DMA传输问题 [问题点数:20分]

Bbs1
本版专家分:0
结帖率 0%
基于WDF的PCIe驱动开发
由于第一次接触WDF<em>驱动开发</em>,因此底层驱动<em>基于</em>微软提供的PCI9056驱动例子(因PCIe和PCI配置空间基本一致,故对9056例子做适当修改便可直接安装使用)。 驱动层提供设备驱动的基本功能函数,包括但不限于设备打开(OpenFile)、设备关闭(CloseFile)、数据读写(ReadFile/WriteFile)以及DeviceIoControl等,本文主要工作是<em>基于</em>基本函数对驱动进行封装
windows驱动开发-基于WDF的Altera PCIe DMA驱动
Altera pcie-avmm <em>dma</em> IP寄存器 DMA Descriptor Controller Registers DMA控制器读写均支持最多128个描述符,读写操作是以FPGA视角来看,读操作是从PCIe地址空间到FPGA Avalon-MM地址空间,写操作是从FPGA Avalon-MM地址空间到PCIe地址空间。 在DMA控制器寄存器里设置描述符表位于在PCIe地址空间里...
基于WDF的PCI/PCIe接口卡Windows驱动程序(1)-WDF概述及开发环境搭建
1.1WDM与WDF Windows平台下的设备驱动程序从Windows 2000开始都是以WDM ( Windows Driver Model) 框架为平台进行开发。以此模型开发,开发者需要一方面实现驱动程序与硬件的交互,另一方面要对操作系统内核进行操作,难度大。驱动程序容易出现<em>问题</em>,这也是Windows2000以来操作系统容易蓝屏的原因。 为了改善这种局面,降低驱动程序开发者的开发
Windows设备驱动程序WDF开发清晰完全版
全网唯一重制版,页面真正清晰版本,已去除广告,含完整书签,含配套源码,看到的同学有福了! 《Windows设备驱动程序WDF开发》主要介绍KMDF设备驱动程序的原理及编程方法;详细介绍KMDF对象及程序基本框架,KMDF和应用程序之间的通信、即插即用和电源管理的编程技术,过滤器驱动程序,KMDF访问硬件设备、处理硬件中断、实现DMA操作的编程技术,以及USB接口和PCI接口设备驱动程序KMDF的开发。还对UMDF设备驱动程序作了编程入门介绍。本书附有13个典型的编程实例,便于读者学习和掌握。 Windows设备驱动程序WDF开发 目录: 第1章 Windows 2000和WDM驱动程序 1.1 Windows 2000组件概述 1.2 Windows 2000中的驱动程序种类 1.3 WDM驱动程序特点 1.2.1 内核模式驱动程序的设计目标 1.3.2 WDM驱动程序模型 1.3.3 设备和驱动程序的层次结构 1.3.4 中断级别IRQL 1.3.5 设备接口 第2章 KMDF驱动程序框架 2.1 KMDF对象 2.1.1 对象概念 2.1.2 基本对象 2.2 KMDF程序结构 2.2.1 DriverEntry例程 2.2.2 EvtDriverDeviceAdd例程 2.2.3 I/O处理例程 2.2.4 即插即用和电源管理例程 2.3 CharSample实例 第3章 基本对象 3.1 WDFREQUEST对象 3.1.1 WDFREQUEST对象函数 3.1.2 I/O请求基本操作 3.2 WDFQUEUE对象 3.2.1 WDFQUEUE对象函数 3.2.2 队列编程 3.3 WDFTIMER对象 3.4 WDFDPC对象 3.5 WDFWORKITEM对象 3.6 WDFMEMORY对象 3.7 数据同步访问 3.7.1 WDFSPINLOCK对象 3.7.2 WDFWAITLOCK对象 3.8 字符串操作 3.8.1 字符串格式 3.8.2 WDFSTRING对象 3.8.3 串处理函数 3.9 QueueSample实例 第4章 KMDF驱动程序编程入门 4.1 建立KMDF编程环境 4.2 创建KMDF驱动程序 4.3 生成KMDF驱动程序 4.4 安装KMDF驱动程序 4.5 RegSample实例 4.5.1 RegSample驱动程序 4.5.2 Win32 Console应用程序 4.5.3 MFC应用程序 4.6 调试说明 第5章 KMDF驱动程序和应用程序之间的通信 5.1 应用程序对驱动程序的通信 5.1.1 打开设备 5.1.2 关闭设备 5.1.3 DeviceIoControl函数调用 5.1.4 ReadFile和WriteFile函数调用 5.1.5 IOSample实例 5.2 驱动程序对应用程序的通信 5.2.1 DeviceIoControl异步完成 5.2.2 WIN32事件通知 5.3 驱动程序对应用程序通信实例 5.3.1 异步完成实例CancelSample 5.3.2 事件通知实例EventSample 第6章 即插即用例程 6.1 即插即用简介 6.1.1 PnP组件 6.1.2 即插即用例程 6.1.3 例程的加载和卸载顺序 6.2 PnpPowerSample实例 第7章 电源管理 7.1 电源管理简介 7.1.1 系统电源状态与设备电源状态 7.1.2 电源管理控制标志位 7.1.3 设备的唤醒特征和空闲检测 7.2 电源管理编程 7.2.1 电源管理基本例程 7.2.2 设备唤醒 7.2.3 空闲检测 7.3 IdleSample实例 第8章 KMDF过滤器驱动程序 8.1 KMDF过滤器驱动程序的编程 8.2 KMDF过滤器驱动程序安装 8.3 FilterSample实例 第9章 USB设备开发 9.1 USB接口概述 9.1.1 USB设备的配置、接口和端点 9.1.2 USB数据的<em>传输</em>方式 9.1.3 USB描述符 9.1.4 标准设备请求 9.2 USB编程对象 9.2.1 WDFUSBDEVICE对象 9.2.2 WDFUSBINTERFACE对象 9.2.3 WDFUSBPIPE对象 9.3 USB编程 9.3.1 激活配置与中止配置 9.3.2 同步操作 9.3.3 异步操作 9.4 USBSample实例 第10章 PCI设备驱动程序开发 10.1 硬件访问 10.1.1 I/O访问 10.1.2 存储器访问 10.1.3 硬件访问编程 10.2 中断处理 10.2.1 WDFINTERRUPT对象 10.2.2 中断处理编程 10.3 DMA<em>传输</em> 10.3.1 DMA编程对象 10.3.2 DMA<em>传输</em>编程 10.4 PCISample实例 10.5 DMASample实例 第11章 UMDF驱动程序编程入门 11.1 UMDF编程环境 11.2 创建UMDF驱动程序 11.3 生成UMDF驱动程序 11.4 安装UMDF驱动程序 11.5 UMDFSample实例 11.5.1 驱动程序 11.5.2 Win32 Console应用程序 第12章 WinDbg使用介绍 12.1 用WinDbg调试KMDF 12.1.1 目标机的设置 12.1.2 主控机的路径设置 12.1.3 建立连接 12.1.4 加载符号文件 12.1.5 设置断点 12.1.6 断点执行 12.1.7 下载符号包 12.2 用WinDbg调试UMDF 12.2.1 路径设置 12.2.2 链接进程 12.2.3 设置断点 12.2.4 使能UMDF加载和初始化代码调试
驱动程序(3) WDF下DMA传输的驱动程序代码详细说明之头文件
之前提到根据KMDF模板生成的程序里主要有5个头文件和3个源文件,接下来的几篇文章则会对这些文件详细说明,一个驱动程序是怎样写成的。这一篇主要说明几个头文件。 1. device.h /*++ Module Name: device.h Abstract: This file contains the device definitions. Environment: Kernel-mode ...
驱动程序(6) WDF下DMA传输的驱动程序代码详细说明之queue.c
这一篇主要讲queue.c里对于消息请求队列的处理,涉及到了和应用程序的通信,同时为了以后的项目需求,也加入了DMA<em>传输</em>和<em>传输</em>完成后的MSI中断处理。 queue.c /*++ Module Name: queue.c Abstract:This file contains the queue entry points and callbacks.And it includes DeviceIoC...
基于WDF的PCI/PCIe接口卡Windows驱动程序(2)-开发者需要了解的WDF中的一些重要的概念
原文出处:http://www.cnblogs.com/jacklu/p/4646601.html 1、WinDBG是唯一的内核驱动调试利器,但是开发PCIe的WDF驱动可以采用“黑盒”方式,所以windbg不是必须的; 2、WDF比WDM好,别再用WDM了; 3、驱动程序编译成的二进制文件是sys类型,和EXE一样都是Portable Executable Fi
学习windows驱动(WDF USB设备驱动开发)
学习WDF USB<em>驱动开发</em>, 那么怎么进行WDF USB设备<em>驱动开发</em>呢? 我们需要懂什么? 需要做什么呢? 根据《竹林蹊径 深入浅出Windows<em>驱动开发</em>》第4章 WDF USB设备<em>驱动开发</em>里介绍的目录可以初见端倪,需要了解USB设备硬件结构,USB软件结构,内核开发, 数据I/O操作,设备控制,用户程序。USB设备硬件结构。 USB是Universal Serial Bus(通用串行总
基于WDF的PCI/PCIe接口卡Windows驱动程序(3)- 驱动程序代码(头文件)
原文出处:http://www.cnblogs.com/jacklu/p/4679304.html 在WDF的PCIe驱动程序中,共有四个.h文件(Public.h  Driver.h  Device.h  Trace.h)。本文将分别对四个文件源代码进行详细的解释。  Public.h 1 #ifndef _USER_H 2 #define _USER_H 3 //
谈WDM与WDF (windows驱动开发)
WDF驱动模型 如所周知,自Windows 2000开始,开发驱动程序必以WDM为基础的,但其开发难度之大,根本不能奢望像用户模式应用程序开发那样容易。为改善这种局面,微软推出了新的驱动程序开发环境。要预先指出的是,这不是另起炉灶改弦更张,而是以WDM为基础进行了建模和封装,显著特点是降低了开发难度。因为: 1、   将原来普通程序设计中<em>基于</em>对象的技术应用到了<em>驱动开发</em>中。WDM中虽也有对象模型
利用DMA进行数据传输的例子
在用DMA进行数据操作时,无非就是对DMA进行相关的控制和一些寄存器的配置,下面是一个比较经典的DMA进行<em>传输</em>的例子: #include #include #include #include #include #include "system.h" #include "sys/alt_<em>dma</em>.h" //#include "altear_avalon_<em>dma</em>.h" #include "al
第二篇.WDF驱动简介及几个驱动对象介绍
1.1   WDF简述: WDF是微软提出的全新驱动程序模型,它提供了面向对象、事件驱动的驱动程序开发框架,对它的研究是设计高效稳定设备驱动程序的基础。注意理解WDF模型的特点,对象模型,以及基本结构. 设备驱动程序是硬件设备连接到计算机系统的软件接口,任何设备都必须有相应的驱动程序才能在计算机系统上正常工作。设备驱动程序的优劣直接关系到整个系统的性能和稳定性,因此,设计和开发稳定高效的驱
SDIO驱动(15)使用DMA传输数据1
硬件支持的数据<em>传输</em>方式: Normal: tasklet_init(&host->pio_tasklet, pio_tasklet, (unsigned long) host);最终调用pio_tasklet()函数完成数据的收发。 DMA:即Direct Memory Access,在数据的<em>传输</em>的过程中不需要CPU直接参与。CPU坐镇中央、发号施令,具体的数据“搬运”工作由DMA这
windows驱动程序WDF开发+WDF USB驱动开发指南+usb2.0协议
本文件夹旨在帮助广大同学们学习windows <em>wdf</em><em>驱动开发</em>。重点是usb<em>驱动开发</em>。学习完这三个文件后,你将拥有为usb设备开发windows驱动程序的能力。如需学习stm32 usb设备的开发,敬请关注本人csdn账号。本人有stm32 usb设备开发的相关文档:“STM32F10xxx全速USB设备开发套件用户手册+usb2.0协议”
《WDF USB驱动开发指南》-- USB软件结构
PDF全文下载地址:http://download.csdn.net/source/2320280 驱网介绍文档:http://bbs3.driverdevelop.com/read.php?tid-120461.html 《USB 软件结构 》   软件结构比硬件来的复杂很多。因为它包含了许多从表面上看不到的层次。比如总线驱动、功能驱动、过滤驱动等。套用社会学的话,这体现了功能应用中
windows wdf 驱动开发总结(9)--网络驱动开发(NDIS)
此篇文章来自Internet,写的挺不错的,在这里转贴过来。NIC1394 网卡驱动收包过程:网卡的发包和收包过程网卡也叫“网络适配器”,英文全称为“Network Interface Card”,简称“NIC”,网卡是局域网中最基本的部件之一,它是连接计算机与网络的硬件设备。无论是双绞线连接、同轴电缆连接还是光纤连接,都必须借助于网卡才能实现数据的通信。    网卡的主要工作原理是整理计算机上发往网线上的数据,并将数据分解为适当大小的
win7 vs2012+wdk8.0 搭建wdf驱动开发环境
开发环境搭建:系统:win7 x64工具:vs2012 + WDK8.0插件:<em>wdf</em>coinstaller.msi(1)先安装vs2012,再安装wdk8.0,这样在打开vs2012时可以创建windows drivers类型的工程。注:vs2012不能安装wdk8.1,wdk8.1必须安装在vs2013上下载链接:http://msdn.microsoft.com/zh-cn/windows/h
驱动开发中应该注意的事项
1. 一定不要在没有标注 I/O 请求数据包 (IRP) 挂起 (IoMarkIrpPending) 的情况下通过调度例程返回 STATUS_PENDING。    2. 一定不要通过中断服务例程 (ISR) 调用 KeSynchronizeExecution。 它会使系统死锁。    3. 一定不要将 DeviceObject->Flags 设置为 DO_BUFFERED_IO 和 DO_D
windows WDF驱动开发总结(7)--网络驱动开发(NDIS)
NDIS 网络设备接口规范(1)    NDIS_PROTOCOL_CHARACTERISTICS函数功能:This structure is used to specify the version numbers and various callback functions for a protocol.typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {  UCHAR MajorNdisVersion;  UCHAR Mino
WDF DMA一些概念(2)
SG list 原来是框架 使用系统提供的物理地址 建立的。   以前第一次接触这个表还以为要由<em>驱动开发</em>者提供呢。 Each element of the list thus represents the physical memory address of either a data buffer fragment or a map register. 链表中的每个元素 含有要么一个dat
WDF DMA 三要素
1 enable object WDF_DMA_ENABLER_CONFIG   <em>dma</em>Config;   WdfDeviceSetAlignmentRequirement(DevExt->Device, PCI9656_DTE_ALIGNMENT_16 ); WDF_DMA_ENABLER_CONFIG_INIT(&<em>dma</em>Config,
WDF驱动开发(1)- 一个简单的WDF驱动(non-pnp)
最近因为工作关系,接触了一下WDF<em>驱动开发</em>。 WDF驱动其实是微软公司提供的一套<em>驱动开发</em>的框架。有了这个框架之后,开发驱动会简单一些。WDF本身是从WDM基础上封装而成的。WDF里面封装了很多对象,如WDFDRIVER等。如果要学习使用WDF来开发驱动,个人感觉还是需要WDM的一些基础,不然很多东西挺难理解的。 写了一个简单的WDF驱动(非pnp),基本步骤如下: 创建framework 驱
从零开始学习Windows WDF驱动程序开发
从零开始学习Windows WDF驱动程序开发 ▼ 目录: 1. 第一部分 编译安装测试一个简单的WDF驱动程序    1.1 编译安装测试    1.2 Windows<em>驱动开发</em>就是要开发出INF文件和SYS文件    1.3 简单介绍下编译脚本    1.4 Windows应用程序如何访问一个设备 2. 第二部分 了解WDF框架并且开发WDF驱
菜鸟WDF驱动开发系列(2):调试第一个KMDF驱动程序
根据系列上一篇的内容,已经基本作好了驱动调试环境的配置,现在着手开始试一下怎么用WinDBG调试。每一位新手在开始学习<em>驱动开发</em>的时候相信总会看大量的资料,如我第一篇提到的几本书的确是不错的,但名著总有一个<em>问题</em>就是,开篇一开始总是会铺陈太多的基本理论,这会让我们觉得手足无措,更不知如何下手。个人的经验是,直接从例程入手,理论要逐步了解——我说这话的主要原因是:我对<em>驱动开发</em>的理论一点也不清楚。反正,先
DriverStudio开发PCI设备DMA数据传输
DriverWizard向导可以创建基本的wDM驱动程序框架,包括总线类型,地址空间,中断源,DMA资源,以及IOCTL(i/o控制代码)的定义等等。详细情况可参看DriverStudio的帮助文档,以下主要介绍如何用DriverWorks编写DMA方式的驱动程序。     DriverWorks关于DMA操作。封装了三个类:KDmaAdapter, KDmaTransfer和KCommonCma
驱动程序(4) WDF下DMA传输的驱动程序代码详细说明之driver.c
从这一篇开始介绍几个比较重要的源文件和应用程序,并且会对其中一些关键代码进行说明。这些代码流程都是本人亲身测试可行的,但是由于当时调试时杂七杂八的东西加的太多,现在看起来有的地方的代码风马牛不相及,如果完全照搬的话可能行不通的,还是需要各位读者自行理解然后加以改进的。当然如果有<em>问题</em>也欢迎各位读者指出更正,谢谢! driver.c /*++ Module Name: driver.c Abstrac...
windows wdf 驱动开发总结(5)--PCI 驱动
PCI驱动相关(CY7C09449)(AMCC5933)     PCI总线标准是一种将系统外部设备连接起来的总线标准,它是PC中最重要的总线。其它总线ISA总线,USB总线都挂在PCI总线上。 (2.1)WDF_INTERRUPT_CONFIG_INIT 函数功能:initializes a WDF_INTERRUPT_CONFIG structure. VOID   WDF_IN
本测试程序实现的功能是: PC 与 FPGA 通过 PCIE 进行 DMA 方式的数据传输
本测试程序实现的功能是: PC 与 FPGA 通过 PCIE 进行 DMA 方式的数据<em>传输</em>
windows 驱动开发 DDK与WDK WDM的区别
最近尝试去了解WINDOWS下的<em>驱动开发</em>,现在总结一下最近看到的资料。   1.首先,先从基础的东西说起,开发WINDOWS下的驱动程序,需要一个专门的开发包,如:开发JAVA程序,我们可能需要一个JDK,开发WINDOWS应用程序,我们需要WINDOWS的SDK,现在开发WINDOWS下的驱动程序,我们需要一个DDK/WDK。   2.DDK(Driver Developer Kit
Linux驱动开发--linux下的DMA编程
DMA编程 DMA是一种无需要CPU的参与就可以让外设与系统内存之间进行双向数据<em>传输</em>的硬件机制,使用DMA可以使系统CPU从实际的I/O数据<em>传输</em>过程中摆脱出来,从而大大提高系统的吞吐率 DMA方式的数据<em>传输</em>由DMA控制器控制,在<em>传输</em>期间,CPU可以并发地执行其他任务,当DMA结束后,DMA控制器通过中断通知CPU数据<em>传输</em>已经结束,然后由CPU执行相应的中断服务程序进行后序处理.DMA可以用做内
WDF 驱动版本及系统支持情况
WDF驱动版本对应操作系统支持情况
WDF驱动中处理消息中断(MSI)
I have been struggling with something similar in the last week. My application is slightly different because I am trying to get plain MSI interrupts rather than MSI-X interrupts to work. But I am using
基于WDF的光纤传输卡PCIe接口驱动的研究和实现
1 综述了Windows驱动的发展现状,指出了目前存在的<em>问题</em>,详细分析了 WDF模型,包括WDF驱动程序的基本结构、框架对象、I/O模型、电源状态和中断请求级,并分析了 I/O请求包的处理过程和<em>传输</em>方式。 2、根据PCIe的WDF驱动程序的功能需求,设计和实现了驱动程序的初始化、读写基址寄存器、获得寄存器的基地址、读写配置空间、中断处理、申请和释放DMA空间等功能。针对光纤通信中海量数据高速<em>传输</em>的特点,<em>基于</em>链表机制,解决了中断的实时响应和DMA空间地址的保存<em>问题</em>,提高了光纤<em>传输</em>卡的<em>传输</em>性能。 3、从应用程序的角度,对与驱动程序密切相关的操作进行了分析,包括建立和断丌应用程序到驱动程序的连接、驱动程序的自动化安装和卸载以及INF文件的设计过程。同时还探讨了提高驱动程序稳定性的方法。 4、搭建测试环境并实现了对驱动程序功能和性能的测试,结果表明所丌发的软件 的有效性和功能的正确性,测试方法为驱动程序的稳定运行提供了保障。
XDMA设备在windows下的驱动编程
XDMA设备在windows下的驱动编程 博客里写的不够详尽,也不太方便阅读代码,我将源码放在百度网盘链接:https://pan.baidu.com/s/1yt1mbl6Unkam3huz8T9MRw 密码:k6ti ;并在源码里做了注释 了解一下什么叫总线模型(这是Linux下的概念,但是感觉和windows有相通之处),总线负责连接驱动和设备,通俗的来说就是总线提供接口给...
Windows设备驱动程序WDF开发及源码
Windows设备驱动程序WDF开发及源码,需要的同志请拿走
驱动编程(一),NT - WDM - WDF 驱动概念
NT是驱动模型:NT式驱动程序模型是一种比较老式的驱动程序模型,但适用于现有的Windows系统。NT式驱动模型没有固定的形式,最简单的NT式驱动程序模型这一特点,程序开发者可以编写一个完全不支持硬件工作的驱动程序,却可以将代码运行在内核模式中。 WDM驱动程序模型:WDM式驱动程序在NT式驱动程序的基础上,还必须: 1、包括wdm.h头文件,问不是ntddk.h(wdm.h是ntddk.h的
windows驱动面试 基础
1、CreateFile从r3到r0所调用的函数 CreateFile-&amp;gt;ZwCreateFile-&amp;gt;NtCreateFile-&amp;gt;IoCreateFile-&amp;gt;IRP_MJ_CREATE 2、自旋锁和信号量在互斥使用时注意哪些? 使用自旋锁的进程不能睡眠,使用信号量的进程可以睡眠。中断服务例程中的互斥使用的是自旋锁 3、minifilter与sfilter的区别 解...
VS2012菜鸟WDF驱动开发系列
<em>基于</em>VS2012的菜鸟WDF<em>驱动开发</em>系列
PCI9054 DMA设置流程
1.设置方式寄存器:设置DMA通道的<em>传输</em>方式,寄存器DMAMODE0或者DMAMODE1的位9:0-表示块<em>传输</em>,1-表示散/聚<em>传输</em>;2.设置PCI地址寄存器:设置PCI总线侧的地址空间。3.设置LOCAL地址寄存器:设置LOCAL总线侧的地址空间。4.设置<em>传输</em>计数寄存器:以字节位单位设置<em>传输</em>数据量。5.设置描述寄存器:设置DMA<em>传输</em>的方向;在散/聚方式下,位0表示<em>传输</em>参数的加载地址,0-PCI地址
WDF驱动开发(3)- 用户模式程序和驱动的数据交互
当用户模式的程序调用驱动的时候,怎么传递数据呢? 通常用户模式程序和驱动的数据交互有3种办法:buffer方式,direct方式和其他方式。可以看之前我写的WDM驱动模型:http://blog.csdn.net/zj510/article/details/8212032 那么在WDF里面又如何操作呢?我们考虑给WDF驱动增加一个功能:将WRITE请求的数据写入设备对象上下文,然后当READ请
Windows7下VS2013+WDK8.1开发WDF驱动程序全过程
1. 安装软件 下载安装VS2013+WDK8.1软件,安装完成后两个软件会自动整合到一起,不需要额外的配置。 2. 开发WDF驱动 打开VS2013,“文件”-“新建“- ”项目“,在左边选择Visual C++下的Windows Driver,选择WDF,然后选择Kernel Mode Driver(KMDF) Visual C++,输入你要创建的驱动的名称,点击“确定”就创建了一个KM
基于AM335X的EDMA 驱动程序开发
0 简介        EDMA即TI自定义的加强版DMA数据<em>传输</em>模式,经过简单的了解,本质上它设计一种非常高效的可以合并多次DMA<em>传输</em>的模式。 1 协议简介        协议的简单介绍可以参考http://blog.chinaunix.net/uid-28818752-id-3749701.html和http://blog.chinaunix.net/uid-24567872-id-31
Windows设备驱动程序WDF开发(含源码)
武安河的《Windows设备驱动程序WDF开发》,是一本<em>wdf</em><em>驱动开发</em>入门好书,里面包含书本所有源码。
Windows内核驱动案例
<em>基于</em>WDF的驱动程序案例,有DMA案例,PCI案例
Windows DMA驱动调试
本文记录我调试微软官方提供的一个PCI驱动sample程序的过程。 一、开发环境和资源下载 1,在win10 X64操作系统下,安装VS2015+WDK10。(参考我前面的<em>驱动开发</em>入门篇) 2,使用TI6655 DSP开发板,点击打开链接。 3,下载微软官方发布在github上的驱动samples,点击打开链接,选择其中的“General/PLX9x5x”这个工程。 4,参考微软关于wi
菜鸟WDF驱动开发系列(3):安装与调试第一个UMDF驱动程序
写了篇2时,我绞尽脑汁想在虚拟机上实现UMDF的远程调试,但没办法,据我能找到的书来看,只有一个方法就是,在WinDBG--File--Attach to a process,哦嘀神啊,在本机怎么Attach目标机器的进程?于是我就崩溃到装了WDK8与VS2012 RC,本以为可以在VS2012里的驱动集成开发模块里找到方法,结果还是没能找到在本机Attach的虚拟机中的进程的办法,于是,我暂时放
DMA地址获取
最近在研究一如何获得连续的物理地址用于DMA,看了很多博客,说是通过kmalloc,get_free_pages等等获取内存空间再通过mmap,ioremap等即可使用,但测试了很多代码,写到DMA寄存器进行DMA操作都没成功。最后发现,其实将获得的物理地址对应的虚拟地址转化成总线地址就可以进行DMA,<em>基于</em>DMA的硬件使用总线地址而非物理地址。 操作环境:Linux ubuntu 4.10.0-
windows驱动程序wdf--KMDF大致框架
继WDM后微软出了WDF,封装了WDM中的一些基本代码逻辑。本人菜鸟,也不知道本质上有何区别,只觉得是多了Wdf开头的函数,基本的编程框架上有点出入。KMDF是WDF的内核级部分,为了理清KMDF的结构,又觉得内核编程很复杂,HelloWorld类型的程序实在说明不了什么  修改一下《windows设备驱动WDF开发》的CharSample,查了WDK帮助文档加上注释以帮助自己理解KMDF的大致运
STM32学习笔记之DMA传输
一、DMA简介 1、DMA简介 DMA(Direct Memory Access:直接内存存取)是一种可以大大减轻CPU工作量的数据转移方式。 CPU有转移数据、计算、控制程序转移等很多功能,但其实转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,再加上一些控制转移的部件就可以完成数据的拷贝。 DMA...
windows驱动开发-基于WDM的PCIe DMA驱动
连接中断 Servicing Interrupts Registering an ISR Using Message-Signaled Interrupts Removing an ISR IoConnectInterrupt MSI必须使用 IoConnectInterruptEx,参考WdmlibIoConnectInterruptEx #define IoConnectInte...
WDF开发USB设备驱动教程(4)
PDF全文下载地址:http://download.csdn.net/source/2320280 7.2  构造并发送控制命令 向USB设备发送控制命令,需要初始化一个WDF_USB_CONTROL_SETUP_PACKET 结构体。WDF定义了一些宏专门用来对结构体进行初始化。这些宏定义分别对应于:为Class类型控制命令初始化、为用户自定义类型控制命令初始化、为标准命令类型控制命令初
驱动程序(5) WDF下DMA传输的驱动程序代码详细说明之device.c
这一篇文章说明了在device.c文件里,驱动程序怎样枚举设备,然后获得设备资源,并将其显示出来供开发者使用。 device.c /*++ Module Name: device.c - Device handling events for example driver. Abstract: This file contains the device entry points and callba...
WDF开发USB设备驱动教程(1)
PDF下载地址(1.2版):http://bbs.driverdevelop.com/read.php?tid-120461.html CY001开发板讨论帖:http://bbs.driverdevelop.com/read.php?fid=22&tid=119314&toread=1 注:本文档新版本已出,请在博客中查找,或下载PDF全文文档。   WDF开发USB设备驱动教程
对一文进行补充
MS 曾在他的Github站点上提出过《源码级调试WDF框架》的方法,文中提到通过.srcfix命令使windbg源码服务器路径指向MS的源码服务器。这样当调试到<em>wdf</em>框架代码时,windbg会去源码服务器下载对应的源码并加载显示在源码窗口。 我尝试过这种方法,然而结果并不像预计的那样: 0: kd> .reload /f <em>wdf</em>01000.sys 0: kd> !lmi <em>wdf</em>01000.s
DMA数据传输过程
一.DMA方式特点:   1、 外部设备的输入输出请求直接发给主储存器。   主存储器既可以被CPU访问,也可以被外围设备访问。因此,在主存储器中通常要有一个存储管理部件来为各种访问主存储器的申请排队,一般计算机系统把外围设备的访问申请安排在最高优先级。   2、 不需要做保存现场和恢复现场等工作,从而使DMA方式的工作速度大大加快。   由于在外围设备与主存储器之间传送数据不需要执行程序
windows下的驱动开发(过滤驱动)
最近对驱动比较感兴趣,所以打算做个windows下面的驱动,正好自己电脑的鼠标左键的单击有的时候会变双击,所有打算弄个鼠标的过滤驱动来解决这个<em>问题</em>。 网上找了一下,原来早就有人做了这个功能 http://download.csdn.net/detail/guijc1/5263421(不是故意给这个打广告的),所以我的代码基本都是仿照这里的源码。 这篇文章的重点是如何动手写一个过滤驱动,不是
STM32 ADC用DMA方式传输数据出错的解决方法
前言 在ADC高速采集数据时,通过DMA一次性获取大量的转换数据。比如10个ADC,一次 void ADCDMAInit(void) { u8 ADC_SampleTime; ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_In...
Linux驱动开发(二)—DMA的使用(一)
1 DMA概念 DMA顾名思义就是指设备和内存之间、内存和外部存储设备之间进行直接的数据读写操作,而不需要CPU的参与。 2 DMA原理        DMA<em>传输</em>需要由DMA控制器DMAC进行,当需要进行DMA<em>传输</em>的时候,DMA控制器会发出占用总线的请求,当CPU响应DMA的请求时,暂时放弃对总线的控制权,当DMA<em>传输</em>结束的时候,DMAC会向I/O接口发出结束命令,并将总线控制权交还给CPU
利用WinDriver开发PCI设备驱动程序
摘要     WinDriver是Jungo公司出版的一个设备驱动程序开发组件,它可以大大加速PCI设备驱动程序的开发。作者在实际的项目中采用了WinDriver来开发设备驱动程序,取得了相当好的运行效果。从目前国内的资料上来看,大多数设计人员还是在用DDK、Wtools开发设备驱动程序,因而作者觉得有必要向大家介绍与推荐这个软件。 WinDriver是一套设备驱动程序开发组件,它的目的就是方
⑱tiny4412 Linux驱动开发之DMA子系统驱动程序
DMA(direct memory access):直接存储器存取,通俗地说就是数据的搬运工,它的存在使得CPU可以脱离繁琐的数据搬运,可以腾出更多时间去做更有意义的事,早在学生时代,学习STM32的时候,就已经接触和使用了DMA.因为STM32上就有DMA,可以看到DMA是已经很普及的器件了,在display, uart, sound等等诸多方面都可以看到DMA的身影.所以,很有必要掌握DMA的...
Windows 7 设备驱动程序开发
WDF体系结构windows<em>驱动开发</em>。。
认识一下WDF
概念WDF(Windows Driver Framework, Windows驱动框架)包含UMDF(User Mode Driver Framework, 用户模式驱动框架)和KMDF(Kernel Mode Driver Framework, 内核模式驱动框架)。内容概括:WDF是<em>基于</em>对象的框架,它包含:驱动对象、设备对象、IO请求对象、队列对象、目标对象等。 框架管理对象的生命周期。 框架
S3C2440 DMA驱动程序编写及测试(三十二)
https://www.cnblogs.com/lifexy/p/7880737.html DMA(Direct Memory Access) 即直接存储访问,DMA<em>传输</em>方式无需CPU直接控制<em>传输</em>,通过硬件为RAM、I/O设备开辟一条直接<em>传输</em>数据的通路,能使CPU的效率大为提高。 学了这么多驱动,不难退出DMA的编写套路: 1)注册DMA中断,分配缓冲区 2)注册字符设备,并提供文件操作...
linux驱动编写(dma驱动)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】    linux下面的驱动虽然什么样的情形都有,但是<em>dma</em>驱动却并不少见。<em>dma</em>可以有很多的好处,其中最重要的功能就是能够帮助我们将数据搬来搬去,这个时候cpu就由时间去做别的事情了,提高了设备效率。1、<em>dma</em>驱动在什么地方drivers/<em>dma</em>2、如何看s3c的<em>dma</em>驱动,先看Kconfigc...
windows虚拟串口驱动开发
windows虚拟串口<em>驱动开发</em>,windows下驱动程序设计。
windows驱动开发-vs2017 WDK10开发环境搭建
下载安装包 微软官网下载安装包,然后下载vs2017离线安装包,双击离线目录setup.exe安装vs2017,选择C++桌面开发。 D:\vs_enterprise__111975078.1529511260.exe --layout D:\vs2017 --lang zh-CN en-US 配置下载缓存路径, vs2017注册码(来自网络) Visual Studio 2017 ...
Windows驱动开发如何入门
搞Windows<em>驱动开发</em>是一件痛苦的事情,特别是初学Windows<em>驱动开发</em>。有的人觉得Windows<em>驱动开发</em>就是把开发包WDK下载下来,然后只要掌握了C/C++语言,接下来无非就是类库调来调去,像调用MFC、QT之类的库那样,看着书和MSDN上的文档来就行了。等真正接触以后才发现根本不是那么一回事,痛苦源于以下几点: 痛苦一:中文资料太少 讲Windows<em>驱动开发</em>的,无论是中文书籍还是
DMA +串口通信
DMA,全称为: Direct Memory Access,即直接存储器访问, DMA <em>传输</em>将数据从一个地址空间复制到另外一个地址空间。 当 CPU 初始化这个<em>传输</em>动作,<em>传输</em>动作本身是由DMA 控制器 来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的 内存区。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。 DMA <em>传输</em>对于高效能嵌入式系统算法和网络是很
windows 驱动开发 WDF
windows <em>驱动开发</em> WDF开发 ,包括详细的<em>驱动开发</em>理论,实力验证
内核中与驱动相关的内存操作之十七(DMA)
DMA,即Direct Memory Access,直接内存访问.主要是考虑到CPU和外设之间拷贝大量数据时提升性能的一种硬件策略.
I.MX6 DMA驱动测试历程imx6 sdma mem to mem demo
memory to memory s<em>dma</em> copy demo,飞思卡尔的imx6 s<em>dma</em>驱动mem to mem的例子 imx6 s<em>dma</em>内存复制驱动, linux内核3.0.35版本! SDMA例子,亲测可用 飞思卡尔的i.mx6驱动,飞思卡尔的i.mx6驱动内存到内存的s<em>dma</em>驱动例子,测试通过; 聚散内容到聚散内存的复制,编译方法是写一个makefile 然后设定内核编译环境的环境变量,然后 make, Makefile 内容: obj-m += imx6_s<em>dma</em>_test_sg_to_sg_demo.o all: make -C /home/xxx/你的内核目录 SUBDIRS=$(PWD) modules clean: make -C /home/xxx/你的内核目录 SUBDIRS=$(PWD) clean
编译安装WDK中ramdisk虚拟磁盘sample
WinDDK版本7600.16385.1,ramdisk sample位于\src\storage\ramdisk目录下; 1.拷出ramdisk整个文件夹到工作目录下,打开WDK的Build Environment—>Windows XP—>x86 Checked Build Environment,进入工作目录下的ramdisk目录 2.执行:BLD 在objchk_wxp_x86\
《Win7设备驱动程序开发》学习笔记
《Windows 7 设备驱动程序开发》是美国Ronald D. Reeves著的一本关于WDF模型的Windows 驱动程序开发教程,适用于Win7和Win10。本文我学习该书的一些笔记,目前主要是一些知识点的索引,通过本文可以迅速找到对应知识点的章节,后续将增加知识点的讲解和个人理解以及扩展链接。内容如下(不断更新中): -------------------------------
Linux下PCIe驱动以及DMA机制
1. 驱动程序作用: ·        设备驱动程序向应用程序屏蔽了硬件在实现上的细节,使得应用程序可以像操作普通文件一样操作外部设备。Linux操作系统抽象了对硬件的处理,可以使用和操作文件相同的,标准的系统调用接口来完成打开,关闭,读写喝I/O控制操作,而驱动程序主要任务也就是实现这些系统调用函数。 ·        每个设备文件对应两个设备号,其中主设备号标识设备种类,也标识了设备所使用
基于Windows8与Visual Studio11开发第一个内核驱动程序
Windows 驱动程序的发展演变 我们在学习开发驱动程序时有必要弄清楚Windows设备驱动程序的发展演变过程(为了简便起见,以下简称驱动程序),以便明白我们将要开发什么样的驱动程序。这就象你开发一个应用程序时必须弄清楚它是运行在WINDOWS平台下还是在DOS平台下,否则我们能写出什么样的应用程序就可想而知了。       驱动程序开发者的各项任务之中,有许多是为特定的硬件编写驱动程序。由于W
DMA的理解
DMA控制器是一种在系统内部转移数据的独特外设,可以将其视为一种能够通过一组专用总线将内部和外部存储器与每个具有DMA能力的外设连接起来的控制器。它之所以属于外设,是因为它是在处理器的编程控制下来执行<em>传输</em>的。值得注意的是,通常只有数据流量较大(kBps或者更高)的外设才需要支持DMA能力,这些应用方面典型的例子包括视频、音频和网络接口。     一般而言,DMA控制器将包括一条地址总线、一条数据
DMA传输的C语言实现
DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现DMA<em>传输</em>的C语言实现
DMA驱动程序解析
1、DMA的具体工作过程: (1)外设向DMA发出请求 (2)DMA通过HOLD向CPU发出总线请求 (3)CPU响应释放三总线,并且发应答HLDA (4)DMA向外设发DMA应答 (5)DMA发出地址、控制信号,为外设<em>传输</em>数据 (6)传送完规定的数据后,DMA撤销HOLD信号,CPU也撤销HOLD信号,并且恢复对三总线的控制 2、驱动程序编写   在本驱动程序中,我们打算在内
wdk中使用自旋锁SpinLock的规则及原因分析
1.尽早释放自旋锁,因为拥有它,其他cpu的活动就要被阻止。     这个没什么好说的 2.拥有自旋锁时不要引起硬件或软件异常,否则系统会崩溃 3.拥有自旋锁是不要访问任何分页代码或数据。    2和3得放一起讨论。这里引用MSDN上的一篇文章:Preventing Errors and Deadlocks While Using Spin Locks 这篇文章中罗列了拥有SpinLock
Win10下VS2015(WDK10)驱动开发环境配置
1、     概述 微软在”WDK7600“以后就不再提供独立的内核<em>驱动开发</em>包了,而是必须首先安装微软集成开发环境VisualStudio,然后再从微软官网下载集成的WDK开发包、或者离线安装包,但是安装后Visual Studio就集驱动程序开发,编译,安装,部署和调试于一身,使得Windows驱动程序开发会变得更容易。对于Windows 10和Visual Studio2015<em>驱动开发</em>W
PCI9054的DMA传输过程
通过设置其DMA控制器内部的寄存器即可实现两总线之间的数据<em>传输</em>。PCI9054的DMA<em>传输</em>过程可由以下几个步骤实现: 1)设置方式寄存器:设置DMA通道的<em>传输</em>方式,寄存器DMAMODE0或者DMAMODE1; 2)设置PCI地址寄存器:设置PCI总线侧的地址空间起始地址; 3)设置LOCAL地址寄存器:设置LOCAL总线侧的地址空间起始地址; 4)设置<em>传输</em>计数
Windows驱动开发之日志打印
在WDF框架中,有一个“trace.h”头文件,在驱动的入口函数中,会用到 // // Initialize WDF WPP tracing. // WPP_INIT_TRACING( DriverObject, RegistryPath ); // // TraceEvents function is mapped to DoTraceMess
基于WDF的PCIPCIe接口卡Windows驱动程序
<em>基于</em>WDF的PCIPCIe接口卡Windows驱动程序<em>基于</em>WDF的PCIPCIe接口卡Windows驱动程序
Windows设备驱动程序WDF开发
WDF<em>驱动开发</em>书籍,武安河著
windows驱动开发推荐书籍
[作者] 猪头三  个人网站 :http://www.x86asm.com/  [序言]  很多人都对<em>驱动开发</em>有兴趣,但往往找不到正确的学习方式.当然这跟<em>驱动开发</em>的本土化资 料少有关系.大多学的<em>驱动开发</em>资料都以英文为主,这样让很多驱动初学者很头疼.本人从 事<em>驱动开发</em>时间不长也不短,大概也就3~4年时间.大多数人都认为会<em>驱动开发</em>的都是牛人, 高手之类的.其实高手,牛人不是这样定义的.
STM32学习笔记一一DMA传输
1.简介 DMA:全称为: Direct Memory Access,即直接存储器访问。 DMA <em>传输</em>方式无需 CPU 直接控制<em>传输</em>,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路, 能使 CPU 的效率大为提高。 STM32 最多有 2 个 DMA 控制器(DMA2 仅存在大容量产品中), DMA1 有 7 个通道。 DMA2 ...
STM32 DMA正常模式等待传输完成和开始下一次传输
选择DMA的正常模式,即DMA只<em>传输</em>一次。如果当<em>传输</em>完一次后,还想再<em>传输</em>一次,就需要重启DMA: DMA_Cmd(DMA1_Channel6,DISABLE);  重新设置源地址  重新设置目的地址  重设<em>传输</em>数量  DMA_Cmd(DMA1_Channel6,ENABLE);  因此建议把DMA_InitStructure定义为全局变量,然后可以使用下面语句来重启DMA:
USB数据采集系统中DMA数据传输的实现
引言 USB通用串行总线(Universal Serial Bus)是被PC机广泛采用的一种总线,目前已经在计算机主板上大量集成,成为一种标准配置接口。它的即插即用、真正的热插拔、可总线供电、高性能和系统造价低等一系列的优点,使得USB接口得到了广泛的应用。特别是随着USB2.0高速<em>传输</em>协议的出现,其数据<em>传输</em>速度达到了480Mb/s,使得USB接口方式的虚拟仪器系统成为今天低成本虚拟仪器系统
WDF驱动安装方法
WDF驱动的安装方法: 编译好的SYS文件、INF文件、另外还需要一个WdfCoInstaller01009.dll文件,对应的WDK版本是7600.16385.1这个版本,其中WdfCoInstaller01009.dll文件位于“WDK安装目录” \redist\<em>wdf</em>\x86下,这个动态链接库文件是WDF驱动框架在安装时所必需的一个文件,用于安装驱动框架本身的相关内容。 下面是具
VS2017+WDK10驱动编译与调试
驱动编译: 安装VS2017 和WDK 10 ,下载地址: https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk 如果安装VS2017时没有选择安装windows SDK,打开Visual Studio Iinstaller添加安装sdk组件 VS2017安装完成,启动下载好的wdks...
dma传输原理,及其linux总线驱动之DMA传输
转载了他人的一篇文章,已表明转载的地址,如有侵权,请告知。 <em>dma</em><em>传输</em>原理 1.DMA请求  CPU对DMA控制器初始化,并向I/O接口发出操作命令,I/O接口提出DMA请求。   2.DMA响应    DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。当CPU执行完当前总线周期即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示DMA已经响应
实验10 硬盘DMA编程
导读:   新一篇: 实验11 多任务和多线程   采用PIO方式访问硬盘,硬盘扇区数据的读写完全由CPU通过IN、OUT指令执行,一个扇区占512字节,需要256次I/O操作,占用CPU资源。读取硬盘扇区时,每次I/O操作包括一个IN指令和一个内存写操作,CPU先读取16位数据到AX中,再将16位数据写入到内存中。写入硬盘扇区时,每次I/O操作则包括一个内存读操作和一个OUT指令。   使用DM
DMA传输详解
直接存储器存取(DMADirect Memory Access)方式是用硬件实现存储器与存储器之间或存储器与I\O设备之间直接进行高速数据传送,不需要CPU的干预。这种方式通常用来传送数据块。MSP430f16x系列单片机内部含有DMA模块,而且几乎内部所有外设都可以触发DMA开始存取数据。这里实现了这个模块的程序通用的函数库,方便使用。 硬件介绍: MSP430F15X/16X 系列
Windows驱动开发之入门篇(一)
本文主要介绍“如何入门Windows<em>驱动开发</em>”和“新手需要掌握哪些知识和动手技能”,大部分是本人探索Windows<em>驱动开发</em>近一月时间的经验之谈。大致包括如下几个方面: 1,开发工具、调试工具和调试手段; 2,Windows<em>驱动开发</em>框架; 3,驱动程序基本知识; 4,PCIE驱动程序; 5,学习资料         以上内容在本文仅做简单介绍,后续随着本人经验的增加,将经常更新本文,并对
基于FPGA的PCIE总线扩展卡的设计
PCIe(PCI express)是用来互联诸如计算机和通信平台应用中外围设备的第三代高性能I/0总线。PCIE体系结构继承了第二代总线体系结构最有用的特点,采用与PCI相同的使用模型和读/写通信模型,支持各种常见的事务。其存储器、I/0和配置地址空间与PCI的地址空间相同。由于地址空间模型没有变化,所以现有的OS和驱动软件无需进行修改就可以在PCIE系统上运行。   PCIE是串行协议,与原有
DMA传输系统
<em>基于</em>PCI总线接口技术的DMA<em>传输</em>系统
stm32使用DMA传输9路ADC使用中断处理数据
使用中断方式的好处就是在其它地方不会调用到DMA<em>传输</em>BUF。如果不小心调用或修改,可能会死机。具体原因没有深究。注意中断函数是否和.s文件里面一致,否则也会死机。根据需求去修改中断函数内容。<em>dma</em>_adc.h#ifndef _DMA_ADC_ #define _DMA_ADC_ #include &quot;sys.h&quot; #define ADC1_DR_Address ((u32)0x40012400+...
对于stm32中dma的理解
一.<em>dma</em>常识. 1.作用:实现片内数据之间的高速<em>传输</em>。即是能够不占用cpu实现数据<em>传输</em>。 2.模式:外设到存储器<em>传输</em>、存储器到外设<em>传输</em>和存储器到存储器<em>传输</em>三种<em>传输</em>模式。 3.stm32中的<em>dma</em>支持外设通道选择,并且可以用仲裁器配置adc对数据流的处理顺序。 4.<em>dma</em>带有一个被称为fifo的东西,主要配置fifo来实现对<em>传输</em>双方要求字长不匹配的调整。即所谓 FIFO 对于要求源地址和
linux S3C2440 DMA驱动开发
linux S3C2440 DMA<em>驱动开发</em>
文章热词 视频图像传输 双目视觉问题 特征点问题 相机标定问题 最优化问题
相关热词 c++ vs2015 wdf c++ 可以开发吗 驱动开发 基于bootstrap c# 屏幕录制传输 区块链问题 基于python的xml教程
我们是很有底线的