管理提醒: 本帖被 xoom 从 WinCE技术交流区 移动到本区(2011-10-18)
串口通信问题:我在TE6410上做了一个串口调试程序,当PC向TE6410发送ABC时,接收正常,当TE6410向PC发送111111之后,再由PC向他发送ABC时接收到的却是ABC111具体接收程序如下:/定义串口接收数据函数类型
void CALLBACK CSerialSampleDlg::OnSerialRead(void * pOwner,BYTE* buf,DWORD bufLen)
{
BYTE *pRecvBuf = NULL; //接收缓冲区
//得到父对象指针
CSerialSampleDlg* pThis = (CSerialSampleDlg*)pOwner;
//将接收的缓冲区拷贝到pRecvBuf种
pRecvBuf = new BYTE[bufLen];
CopyMemory(pRecvBuf,buf,bufLen);
//发送异步消息,表示收到串口数据,消息处理完,应释放内存
pThis->PostMessage(WM_RECV_SERIAL_DATA,WPARAM(pRecvBuf),bufLen);
}
// 串口接收数据处理函数
LONG CSerialSampleDlg::OnRecvSerialData(WPARAM wParam,LPARAM lParam)
{
CString strOldRecv = L"";
CString strRecv = L"";
//串口接收到的BUF
CHAR * pBuf = (CHAR*)wParam;
//串口接收到的BUF长度
DWORD dwBufLen = lParam;
//接收框
CEdit *pEdtRecvMsg = (CEdit*)GetDlgItem(IDC_EDT_RECV);
ASSERT(pEdtRecvMsg != NULL);
//得到接收框中的历史文本
pEdtRecvMsg->GetWindowTextW(strOldRecv);
//
strRecv = CString(pBuf);
//将新接收到的文本添加到接收框中
strOldRecv = strOldRecv +L"\r\n"+strRecv;
pEdtRecvMsg->SetWindowTextW(strOldRecv);
//释放内存
delete[] pBuf;
pBuf = NULL;
return 0;
}
单步执行时,只要TE6410向PC机发送111111之后,pRecvBuf在没有执行CopyMemory(pRecvBuf,buf,bufLen);
语句前的数据就是111111