阅读:1006回复:6
有50分:DriverWorks下如何实现内存共享,帮忙看看我的code啊?
我看了以前的贴子,我想大概过程如下
1.应用程序分配内存空间,将其指针通过DeviceIoControl传给驱动程序 2.驱动程序将该指针转换为驱动程序可用地址。 我在Driverworks下这样做: PUSHORT m_recbuf; KMemory *m_mdlrec; switch (I.IoctlCode()) { CASE ...... PUSHORT recbuf = (PUSHORT) I.IoctlBuffer(); m_mdlrec = new KMemory(recbuf,128); m_mdlrec->LockPages(IoModifyAccess); m_recbuf = (PUSHORT) m_mdlrec->MapToSystemSpace(); I.Information() = 0; t << "SHARE―MEM_Handler finish " << EOL; return status; .............. } 不过好象没反映,在这个函数以外就不能用了,这样行不行啊? 帮帮我啊~~ |
|
|
沙发#
发布于:2004-06-15 23:41
这样当然不行,如果你使用了BUFFER_IO你的recbuf 应该是IO管理器分配的空间,在离开这个上下文后被释放了。
如果使用DIRECT_IO,那么你的哪个指正也可能有问题,你在应用程序中怎么分配的呢? |
|
|
板凳#
发布于:2004-06-16 10:09
谢谢 AllenZh 兄!!
我用的是DIRECT―IO,在应用程序中是 NEW 出来的啊~~~ 然后直接传过去了~~~ |
|
|
地板#
发布于:2004-06-16 13:00
用NIETHER的方式,可以直接使用RING3指针
|
|
|
地下室#
发布于:2004-06-17 16:23
我后来又 加了一句 SetPageArray,原来的Direct方式的指针如AllenZh 兄所说写错了,现在可以用了~~给分~~
还有我想请问一下 有没有哪位用过PCI9052,它的交互性能如何啊?我现在做的卡实时性要求很高,我是用的Drierstudio 写的,普通的读写,我测了一下,好象只能 1Byte/us,不知有没有更好的处理方法使 计算机与外部的交互速度 加快??改变方案用PCI9054的DMA会不会好一点啊~~~~ |
|
|
5楼#
发布于:2004-06-19 22:52
我后来又 加了一句 SetPageArray,原来的Direct方式的指针如AllenZh 兄所说写错了,现在可以用了~~给分~~ 1Byte/us太慢了点吧,驱动和硬件是否设计有问题? DMA当然可以更快些。 |
|
|
6楼#
发布于:2004-06-20 23:00
我原来测的时间有点问题,误导了~~:)
|
|
|