myswin
驱动小牛
驱动小牛
  • 注册日期2003-10-13
  • 最后登录2005-11-21
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1006回复:6

有50分:DriverWorks下如何实现内存共享,帮忙看看我的code啊?

楼主#
更多 发布于:2004-06-15 23:24
我看了以前的贴子,我想大概过程如下
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;
        ..............

}
不过好象没反映,在这个函数以外就不能用了,这样行不行啊?
帮帮我啊~~
=========== D =========== R =========== I =========== V =========== E ---------抵制日货-------
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-15 23:41
这样当然不行,如果你使用了BUFFER_IO你的recbuf 应该是IO管理器分配的空间,在离开这个上下文后被释放了。
如果使用DIRECT_IO,那么你的哪个指正也可能有问题,你在应用程序中怎么分配的呢?
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
myswin
驱动小牛
驱动小牛
  • 注册日期2003-10-13
  • 最后登录2005-11-21
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-16 10:09
谢谢 AllenZh 兄!!
我用的是DIRECT―IO,在应用程序中是 NEW 出来的啊~~~
然后直接传过去了~~~
=========== D =========== R =========== I =========== V =========== E ---------抵制日货-------
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地板#
发布于:2004-06-16 13:00
用NIETHER的方式,可以直接使用RING3指针
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
myswin
驱动小牛
驱动小牛
  • 注册日期2003-10-13
  • 最后登录2005-11-21
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-17 16:23
我后来又 加了一句 SetPageArray,原来的Direct方式的指针如AllenZh 兄所说写错了,现在可以用了~~给分~~
还有我想请问一下 有没有哪位用过PCI9052,它的交互性能如何啊?我现在做的卡实时性要求很高,我是用的Drierstudio 写的,普通的读写,我测了一下,好象只能 1Byte/us,不知有没有更好的处理方法使 计算机与外部的交互速度 加快??改变方案用PCI9054的DMA会不会好一点啊~~~~
=========== D =========== R =========== I =========== V =========== E ---------抵制日货-------
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-19 22:52
我后来又 加了一句 SetPageArray,原来的Direct方式的指针如AllenZh 兄所说写错了,现在可以用了~~给分~~
还有我想请问一下 有没有哪位用过PCI9052,它的交互性能如何啊?我现在做的卡实时性要求很高,我是用的Drierstudio 写的,普通的读写,我测了一下,好象只能 1Byte/us,不知有没有更好的处理方法使 计算机与外部的交互速度 加快??改变方案用PCI9054的DMA会不会好一点啊~~~~
 

1Byte/us太慢了点吧,驱动和硬件是否设计有问题?
DMA当然可以更快些。
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
myswin
驱动小牛
驱动小牛
  • 注册日期2003-10-13
  • 最后登录2005-11-21
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-06-20 23:00
我原来测的时间有点问题,误导了~~:)
=========== D =========== R =========== I =========== V =========== E ---------抵制日货-------
游客

返回顶部