出现的问题:
上层用ReadFile(hFile, &status, 512, &actlen, NULL)打开设备调用DWORD KEY_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes)这个函数时出现问题,本来是要返回512个数据的,结果打印显示打印到163个数据的时候就出现错误了。串口打印如下:
162 1813
163 1754
Fatal Stack Error, Terminating thread 8fd56704, pexi = 1006fe24
Exception 'Data Abort' Thread=8fd56704 AKY=00000085 PC=01d320cc BVA=10070000
R0=01d31908 R1=000000a4 R2=000006da R3=000006da
R4=000000a4 R5=10070000 R6=01d33078 R7=00000200
R8=1006feb8 R9=80000004 R10=00000001 R11=1006fe94
R12=8f7d1143 SP=1006fe54 Lr=01d320d4 Psr=8000001f
Data Abort: Thread=8fd56704 Proc=8ddd6160 'device.exe'
分析原因:
可能是上层调用不规范,同样的问题在以前用IOControl这个函数里也出现过的,以前解决方法
DeviceIoControl(hFile, IOCTL_SET_ADC_CHANNEL, &channel, 1, DispAIN0, 512, &intlen, NULL);
将接收缓冲设为512问题就解决了
函数分析
unsigned short *pReadBuffer;
/*add end 09-6-16 by zhouyi*/
if ((pBuffer == NULL) || (dwNumBytes <= 0))
return 0;
pReadBuffer = MapPtrToProcess(pBuffer, GetCallerProcess());
for(i=0; i<512; i++)
{
*pReadBuffer= *v_pDaqData;
RETAILMSG (1,(TEXT(" %d %d/n/r"),i,*pReadBuffer));
pReadBuffer++;
}
在163次时pReadBuffer就出现问题,函数异常,显然问题出在pReadBuffer上
解决办法: