c语言写串口数据0a变成0d 0a问题
问题描述:
PortWrite:02 0A 50 00 00 00 00 00 00 00 00 00 00 03
PortRead:接收数据超时
经PC端调试工具调试发现接受到的数据为:02 0D 0A 50 00 00 00 00 00 00 00 00 00 00 03。故ICT板没响应(接收数据与预期不符),而终端发送数据与预期一致(aucSend,aucSend1为写入数据)。
该现象为偶现。有时候调试1天也没有出现该问题。
以下为定位该问题
源码如下:(PortWrite这类函数已封装好,用了几十年。基本可以排除底层问题)
int SP80_ICT_Commu(int nLevel)
{
char aucRead[20] = {0}, aucSend[20] = {0}, aucSend1[20] = {0};
int nLen = 0,nRet = 0, nErrFlag = 0;
//SP80与ICT通讯指令
tICTStatus.acStatus50[0] = 0x50;
memcpy(aucSend1,"\x02\x0A\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03",14);
//发送数据
memcpy(aucSend,"\x02\x0A",2);
memcpy(aucSend+2,tICTStatus.acStatus50,10);//tICTStatus.acStatus50:50 01 00 00 00 00 00 00 00 00 00
memcpy(aucSend+12,"\x00\x03",2);
SP80_ICT_COMMUM:
if((nRet = PortClrBuf(PORT_NUM_COM1)) != NDK_OK) /*清接收缓冲*/
{
cls_show_msg("line %d,nRet=%d", __LINE__, nRet);
return NDK_ERR;
}
if((nRet = PortWrite(PORT_NUM_COM1, 14, (nLevel == 1) ? aucSend : aucSend1)) != NDK_OK) /*往串口发送测试数据*/
{
cls_show_msg("line %d,nRet=%d", __LINE__, nRet);
return NDK_ERR;
}
//接收数据,2秒超时
if(((nRet = PortRead(PORT_NUM_COM1, 14, aucRead, 10*1000,&nLen)) != NDK_OK) || (nLen != 14))
{
cls_show_msg("line %d,(ret=%d)(实际%d, 预期%d)", __LINE__, nRet, nLen, 14);
cls_show_msg("nLevel = %d\n"
"aucSend=%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n"
"aucSend1=%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n"
"acStatus50=%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x",
nLevel, aucSend[0],aucSend[1],aucSend[2],aucSend[3],aucSend[4],aucSend[5],aucSend[6],aucSend[7],aucSend[8],aucSend[9],aucSend[10],aucSend[11],aucSend[12],aucSend[13],
aucSend1[0],aucSend1[1],aucSend1[2],aucSend1[3],aucSend1[4],aucSend1[5],aucSend1[6],aucSend1[7],aucSend1[8],aucSend1[9],aucSend1[10],aucSend1[11],aucSend1[12],aucSend1[13],
tICTStatus.acStatus50[0],tICTStatus.acStatus50[1],tICTStatus.acStatus50[2],tICTStatus.acStatus50[3],tICTStatus.acStatus50[4],tICTStatus.acStatus50[5],tICTStatus.acStatus50[6],tICTStatus.acStatus50[7],tICTStatus.acStatus50[8],tICTStatus.acStatus50[9]);
goto SP80_ICT_COMMUM;
return NDK_ERR;
}
return NDK_OK;
}
求指教,感激不尽!!!