首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

2440_WinCE_6.0 驱动和应用程序共享内存,该怎么解决

2012-03-22 
2440_WinCE_6.0 驱动和应用程序共享内存现在在做一个摄像头的数据采集,在驱动中分配了一段连续的物理地址

2440_WinCE_6.0 驱动和应用程序共享内存
现在在做一个摄像头的数据采集,在驱动中分配了一段连续的物理地址给2440的camera interface。现在应用程序想获得这些数据,所以我用了VirtualAllocEx和VirtualCopyEx将驱动中的这段物理地址也映射到了应用程序的虚拟地址空间。但是遇到的问题是当我关闭这个应用程序是,操作系统会回收所有的由该应用程序创建的内存空间,所以这段映射的物理地址也随之被回收了,这就早成了下次调用摄像头驱动的时候驱动崩溃的情况。
  所以现在想问一下是否有其他方法可以实现CE下驱动和应用程序共享内存,而且可以按照共享内存的机制去安全释放内存。由于WDK上的很多函数在CE下是没有实现的,所以我也不知道有什么函数可以来实现。
谢谢!

[解决办法]
不知道LZ在驱动中申请共享内存是咋搞的,理论上,当使用CreateFile的时候打开驱动,这时应该要在驱动中(XXX_Open)申请共享内存,在CloseHandle的时候驱动(XXX_Close)释放共享内存,这样的话是可以实现数据共享的。但是,使用这个会有个缺陷,在应用程序非正常退出的时候,上次在驱动申请的共享内存就没有被释放掉。
[解决办法]
楼主的内存在驱动开辟,那应该是map到上层来用的吧,那你每次用完,要退出前至少要unmap一下啊,不然肯定会连累下面的内存啊。
[解决办法]
楼主可以看看《WinCE6.0中应用程序如何直接访问物理空间》,http://www.cnblogs.com/we-hjb/archive/2010/02/25/1673815.html

可能对你有帮助
[解决办法]
unmap用VirtualFree为什么不行?
[解决办法]
这个总比驱动崩溃要强吧。
内存泄漏70KB是怎么得来的,如能捕捉到地址,应该会有很大帮助

探讨

我也试过这种方法,在每次进入应用程序的时候分配,然后退出的时候释放。但是每次在驱动中执行过一次内存分配和释放后,关闭应用程序就会有内存泄漏的现象,大约70KB。但是在应用程序执行过程中,无论我分配和释放多少次,都不会有内存泄漏。分配和释放的大小都是按照预定的来。如果打开应用程序不调用IOCTL,直接关闭应用程序也不会出现内存泄漏的现象。这个着实令我郁闷了!

热点排行