5.根据我的理解,函数CeOpenCallerBuffer检查一个传入的地址unmapped并让驱动获得一个驱动能用的相对应的地址mapped,在驱动里访问mapped就等于在应用程序里访问unmapped,理解的对吗? ; 而函数CeAllocAsynchronousBuffer我不太理解,这个函数分配的内存是怎么等同于应用程序里分配的缓存的?调用CeAllocAsynchronousBuffer时的参数2是一个“Pointer to the buffer that has already been marshaled for synchronous access by the current process”,这个地址和应用程序里的地址是什么关系?是不是在调CeAllocAsynchronousBuffer前要先用CeOpenCallerBuffer?
按照您说的不使用CeOpenCallerBuffer,结果在写数据线程里面往这个地址重复写了2次后,在第三次写这个地址时(此时应用程序还没有访问这片内存)就出现了错误exception data abort (4),PC指向memcpy函数,我在写线程用的memcpy。
但是在出错使驱动停掉后,在应用程序中读数据,发现数据有了,说明前两次数据写成功了。