下面一段进程,怎么都不工作,请各位帮看看怎么回事?
这是一段对CY68013的Slave FIFO进行数据采集。
这是一段对CY68013的Slave FIFO进行数据采集。
UINT ReadThreadLoop( LPVOID params ) { //线程处理 int i; bool okin; CMySampleDlg *dlg = (CMySampleDlg *) params; OVERLAPPED inOvLap; //是一个包含了用于异步输入输出的信息的结构体 PUCHAR inData = new UCHAR[512]; //数据缓冲区 ZeroMemory(inData,1024); //ZeroMemory用0填充一片内存,第一个参数是起始地址,第二个参数是长度 inOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_IN"); dlg->InEndpt->TimeOut = 0; for (i=0;i<512;i++) //循环 { LONG inlen=512; //异步读数据 UCHAR *inContext = dlg->InEndpt->BeginDataXfer(inData,inlen,&inOvLap); dlg->InEndpt->WaitForXfer(&inOvLap,200); okin = dlg->InEndpt->FinishDataXfer(inData,inlen, &inOvLap,inContext); if (okin) //假如读取成功,则保存数据 { mFile.SeekToEnd(); mFile.Write(inData,inlen); } } //结束Start ept->Target = TGT_DEVICE; ept->ReqType = REQ_VENDOR; ept->Direction = DIR_TO_DEVICE; ept->ReqCode = 0xAB; //请求码 ept->Value = 0; ept->Index = 0; PUCHAR buf=new UCHAR[2]; ZeroMemory(buf, 2); LONG buflen = 2; buf[0]=0xAB; buf[1]=0x00; //结束Start ept->XferData(buf,buflen); CloseHandle(inOvLap.hEvent); delete [] inData; dlg->ReadThread = NULL; //线程结束 dlg->USBDevice->Close(); //关闭USB设备 mFile.Flush(); //关闭文件 mFile.Close(); return true; }
有时候会提示“内存不足”
有时候会出现如图的提示:
这是用另一个软件接收到的传输的数据:
解决方案
30
单步运行一下到哪里出错的
10
你这段代码错误或不合理的地方有点多啊
这里 :
PUCHAR inData = new UCHAR[512]; //数据缓冲区
ZeroMemory(inData,1024); //你只申请了512却初始化1k;
这里:
delete [] inData;//这样会产生野指针,应该加上inData = NULL;
这里:
PUCHAR buf=new UCHAR[2];
ZeroMemory(buf, 2);
内存直接没有释放。
这里 :
PUCHAR inData = new UCHAR[512]; //数据缓冲区
ZeroMemory(inData,1024); //你只申请了512却初始化1k;
这里:
delete [] inData;//这样会产生野指针,应该加上inData = NULL;
这里:
PUCHAR buf=new UCHAR[2];
ZeroMemory(buf, 2);
内存直接没有释放。