阅读:1993回复:5
驱动对应用传下来的指针进行操作失败????
在调试IIC驱动,现在遇到个郁闷的问题.
要实现的应用: 应用程序通过IIC向FM模块发送配置数据. 执行处理过程和出现的错误: 应用程序向IIC驱动通过IOCTL_I2C_WRITE传送了 DWORD SlaveAddr; // Target Slave Address UCHAR WordAddr; // Starting Slave Word Address PUCHAR Data; // pBuffer DWORD Count; // nBytes to read/write 在IOCTL中将PUCHAR Data用MapPtrToProcess映射到了pI2C->hProc的进程空间。 此时,在IOCTL中将PUCHAR Data指向的数据打印出来是对的,接着把上面得到的参数传给 dwErr = HW_Write(pI2C, ((PI2C_IO_DESC)pBufIn)->SlaveAddr, ((PI2C_IO_DESC)pBufIn)->WordAddr, puc, ((PI2C_IO_DESC)pBufIn)->Count); 在HW_Write中对pI2C的成员做设置,其中 pI2C->Data = puc; for(i=0;i<Count;i++) RETAILMSG(1,(TEXT(">HW_Write(pBufIn[%d]=0x%x)\r\n"),i ,*(pI2C->Data))); RETAILMSG(1,(TEXT(">HW_Write(pI2C->Data=0x%x)\r\n"),pI2C->Data)); 在上面再次对pI2C->Data操作并打印出来也是对的。 问题来了:当HW_Write启动IIC后,整个IIC操作在I2C_IST()中进行,而IIC在发送数据时对指针pI2C->Data指向的空间取直来发送时,就出现了异常:data abort: thread=83d8dc30........ 得到的异常是 I2C_IST EXCEPTION:0xc0000005 为什么在I2C_IST中对pI2C->Data的操作会异常??我已经在IOCTL中MapPtrToProcess了还不行吗?但在HW_Write中处理时有是可以的? |
|
沙发#
发布于:2008-04-16 17:32
自己顶起先....
|
|
板凳#
发布于:2008-04-16 18:18
用户被禁言,该主题自动屏蔽! |
|
地板#
发布于:2008-04-17 21:20
在你的IST中调用SetPProcPermission,,具体用法看一下帮助.
|
|
|
地下室#
发布于:2008-04-18 18:11
我的2440的,我现在也只是在驱动里搞个全局的数组,在IOCTL里转换移一下,其他招也想不起来了.
|
|
5楼#
发布于:2008-04-24 18:18
我原来也遇到过这种问题,也是用全局变量的方法来回避的.但是很奇怪的是,在开发板上试的时候又是正常的了.
|
|