阅读:2344回复:4
pci数据采集卡两种dma方式的比较,哪一种更好?
我目前在做一块pci的数据采集卡
考虑了两种dma方式,请指点一下哪种方式比较好。 1. 驱动程序开辟common buffer, pci卡连续向common buffer写数据,应用程序需要数据时发送irp到驱动,驱动程序在处理irp时将数据从common buffer拷贝到用户缓冲区; 2. 应用程序需要数据时发送irp到驱动,驱动收到irp后锁定用户缓冲区,然后启动dma,将数据直接写入用户缓冲区。 第一种方法pci卡可以连续传送数据,且不需要每次都做锁定缓冲区的工作,但是需要将数据从common buffer拷贝到用户缓冲区; 第二种方法不需要将数据从kernel buffer拷贝到user buffer,但是无法进行连续的数据传输,要在板卡上加大容量缓存。 这两种方法各有利弊,哪一种效率更高一点呢。我的数据传输速度大概20MBytes/s |
|
沙发#
发布于:2007-02-28 22:33
我还没有做到你这步呢?努力中
|
|
板凳#
发布于:2007-03-14 14:26
如果你用DDK的话建议这样做,其它工具开发的我不懂。
a、驱动初始化时用MmAllocateContiguousMemory申请一块连续的内存空间。 b、PCI有数据要传输时,给PC发中断,驱动接收到中断后,启动9054DMA,9054把数据写到申请的连续dma内存空间,写完后再次给PC中断,PC驱动接收到中断,把数据从连续的DMA内存空间复制到驱动公共缓冲区(初始化时申请)。 c、上层应用程序调用读IRP从驱动公共缓冲区读数据。 d、驱动公共缓冲区最好用两个指针去操作,写指针(中断服务程序中用),读指针(响应读IRP调用函数中用)。 |
|
驱动小牛
![]() |
地板#
发布于:2007-09-06 14:28
学习中...
|
地下室#
发布于:2007-09-06 15:21
学习呀 刚刚开始要搞采集卡的驱动,被老板逼得
|
|