Win32 同步串口编程 ReadFile接收不到数据,该怎么解决

 我来答
匿名用户
2016-07-20
展开全部
串口同步读写数据,ReadFile会一直阻塞,但是用串口调试助手可以接受到数据。
不过之后再启动程序就正常了,很郁闷,不知道问题出现在哪里,下面把代码贴出来:
以同步方式打开串口:
bool CSerialIO::openSerialPort(char* szSerial){HANDLE hSerial=CreateFileA(szSerial,
GENERIC_READ|GENERIC_WRITE,0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);if(INVALID_HANDLE_VALUE==hSerial)
return false;
this->hComm=hSerial;
memcpy(cComm,szSerial,strlen(szSerial));
cComm[strlen(szSerial)]='\0';
return true;}读串口:unsigned WINAPI RecieveData(void* pProcessData){ProcessData* pPD=(ProcessData*)pProcessData;while(1){if(pPD->bClosePushThread==true)
ExitThread(0);
byte byteTempBuffer[512]={0};
int iRead=0;
if(pPD->pSerialIO->readSerialPort(byteTempBuffer,511,iRead)){if(iRead<=0){Sleep(1000);continue;}else{pPD->critSecData.lock();
pPD->bVectorRawData.insert(pPD->bVectorRawData.end(),byteTempBuffer,byteTempBuffer+iRead);
pPD->critSecData.unLock();continue;}}Sleep(1000);}return 0;}这是一个线程入口函数,pPD->pSerialIO->readSerialPort(byteTempBuffer,511,iRead)这句代码实际上就是调用ReadFile来读串口数据,在这里设个断点,每次进入这个线程都会阻塞在这个地方,但是如果我用下串口调试助手后,就不会出现这个问题,也就是说 我要读写的串口必须要先被其他的进程读写过,然后才能正常运行。
ps:不要建议我异步读写串口,因为我现在问题还没解决。不知道是不是还需要对串口的参数进行设置。
再说下重点,我的程序可以正常运行的前提是:程序运行之前,用过串口调试助手之类的,也就是说必须要利用别的程序对串口的参数进行设置我的程序才能正常运行。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式