当前位置: 代码迷 >> WinCE >> 在CE6系统中,DMA从装置读数据直接写应用程序BUFF出错
  详细解决方案

在CE6系统中,DMA从装置读数据直接写应用程序BUFF出错

热度:230   发布时间:2016-04-28 12:00:20.0
在CE6系统中,DMA从设备读数据直接写应用程序BUFF出错
各位好!
我现在基于CE6系统,利用芯片的DMA,读取设备的数据。
应用程序将定义的数据的首地址及数据长度,通过DeviceIoControl传给驱动程序。驱动程序中启动DMA,并开启一个线程等待DMA中断。中断后,停止DMA工作,并将DMA所读取的数据复制给传入的数据地址中(CeSafeCopyMemory),这时会时不时地出现类似指针越界的情况(约10%左右的出错率)。
如果驱动程序中启动DMA后,直接死等DMA中断(不单独使用线程),然后直接复制数据,就不会出错,这是什么原因呢?不知有没有谁遇到过。
------解决方案--------------------
DMA只会操作物理地址,应用层传下来的是虚拟地址。
你需要在驱动里开辟物理地址,然后应用层去映射虚拟地址
  相关解决方案