串口写线程发生的错误 0xC0000005: 读取位置 0x00000680 时发生访问冲突.,大家分析下,是什么原因
BOOL CCESeries::WritePort(BYTE *buf, int bufLen)
{
DWORD dwNumBytesWritten;
DWORD dwHaveNumWritten =0 ; //已经写入多少
PurgeComm( m_hComm, PURGE_RXCLEAR |PURGE_RXABORT);//清除接收。
ASSERT(m_hComm != INVALID_HANDLE_VALUE);
do
{
if (WriteFile (m_hComm,//串口句柄
buf+dwHaveNumWritten,//被写数据缓冲区
bufLen - dwHaveNumWritten, //被写数据缓冲区大小
&dwNumBytesWritten,//函数执行成功后,返回实际向串口写的个数
NULL))//此处必须设置NULL
{
dwHaveNumWritten = dwHaveNumWritten + dwNumBytesWritten;
//写入完成-------------------------走到这句一下子就跳到读线程了if (dwHaveNumWritten ==(DWORD) bufLen)
{
break;
}
}
else
{
return FALSE;
}
}while (TRUE);
return TRUE;
}
跳到读线程这句
//触发读取回调函数
ceSeries->m_OnSeriesRead(ceSeries->m_pPortOwner,readBuf,actualReadLen);
就走不动了,弹出上述错误:
Unhandled exception at 0x00000680 in dfss.exe: 0xC0000005: 读取位置 0x00000680 时发生访问冲突.
[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
[解决办法]
actualReadLen值异常 最好一个一个字节的读
[解决办法]
ceSeries->m_pPortOwner,readBuf
多半是指针ceSeries或者readBuf指向的地方不正确.