VC中怎样设置串口一次接收数据〉8个字节?谢谢
在串口接收中,用ClearCommError()函数,得到的comstat的cbInQue总<=8,怎样才能〉8?
就是说我收22个数要分3次才能收完。怎样才能一次收完阿?谢谢!
问题点数:0、回复次数:12Top
1 楼LIN1120()回复于 2005-06-01 14:15:43 得分 0
用sleep()函数,强制线程休眠,22个数大概有30ms就可以,你还可以通过设COMMTIMEOUTS的各个参数考虑两个字符到达的时间间隔是否到达一定超时时间,不过第一种方法比较简单Top
2 楼tramper2000(tramper)回复于 2005-06-01 15:53:16 得分 0
不是这样,当收〉8个字节时,
有这种情况:
EV_RXCHAR事件发生了,我用ClearCommError查询字节数,cbInQue会是0,咋回事?Top
3 楼lfchen(一条晚起的虫--床上用品[家纺]专卖)回复于 2005-06-01 16:10:20 得分 0
用API就不会有问题了
用MSCOMM我还没找到办法
关注Top
4 楼openforever(++)回复于 2005-06-01 16:27:10 得分 0
不明白,没这个问题的呀
SetInBufferSize(1024); //设置输入缓冲区的大小(设置了吗?)
Top
5 楼jobine(愚人渡)回复于 2005-06-01 16:36:01 得分 0
EV_RXCHAR事件发生了,我用ClearCommError查询字节数,cbInQue会是0,咋回事?
缓冲中的数据已空。应该重新用CleareCommError进行测试。
另外如果是异步读串口,ReadFile可能因另一个IO操作在进行而返回FALSE, 需要用GetOverLappedResult来获得真正读取的字节数。
Top
6 楼LIN1120()回复于 2005-06-01 19:01:32 得分 0
如果cbInQue=0并不能保证没接到字符的话,是不是用GetOverLappedResult就直接判断收到几个字节就好了呢?我没见过这方面的例子耶!能讲详细点吗?多谢!!Top
7 楼tramper2000(tramper)回复于 2005-06-01 19:05:04 得分 0
jobine(愚人渡):
EV_RXCHAR事件发生了,
我设了个循环一直读,用ClearCommError查询字节数,cbInQue一直是0
咋回事阿?Top
8 楼tramper2000(tramper)回复于 2005-06-01 19:06:28 得分 0
LIN1120() :
GetOverLappedResult应该是readfile以后判断拉Top
9 楼jobine(愚人渡)回复于 2005-06-01 19:31:34 得分 0
给你一段程序看一下
BOOL CXXComm::ReadComm(DWORD &dwBytesRead)
{
BYTE byBuffer[BUFFER_LENGTH];
DWORD dwError;
BOOL bRead = TRUE, bRet = FALSE;
COMSTAT comstat;
while (m_bCommOpen)
{
if (ClearCommError(m_hComm, &dwError, &comstat) && dwError > 0) //if any error
{
::PurgeComm(m_hComm, PURGE_RXCLEAR | PURGE_RXABORT);
break;
}
if (0 == comstat.cbInQue)
{
break;
}
if (bRead)
{
if (!ReadFile(m_hComm, byBuffer, BUFFER_LENGTH, &dwBytesRead, &m_ov))
{
if (GetLastError() == ERROR_IO_PENDING)
{
bRead = FALSE;
}
else
{
dwBytesRead = 0;
//error, unhandled
}
}
else
{
bRead = TRUE;
}
}
if (!bRead)
{
bRead = TRUE;
if (!GetOverlappedResult(m_hComm, &m_ov, &dwBytesRead, TRUE))
{
dwBytesRead = 0;
//error, unhandled
}
}
if (dwBytesRead > 0)
{
bRet = TRUE;
m_cs.Lock();
m_InBuffer.AddBuffer(dwBytesRead, byBuffer);
m_cs.Unlock();
}
}//while
return bRet;
}Top
10 楼tramper2000(tramper)回复于 2005-06-01 20:07:40 得分 0
jobine(愚人渡):
if (dwBytesRead > 0)
{
bRet = TRUE;
m_cs.Lock();
m_InBuffer.AddBuffer(dwBytesRead, byBuffer);
m_cs.Unlock();
}
是什么意思啊?m_InBuffer,byBuffer是怎么定义的阿?
谢谢!
Top
11 楼tramper2000(tramper)回复于 2005-06-01 20:56:39 得分 0
大虾们说说话阿
Top
12 楼gitolf()回复于 2005-06-01 21:07:52 得分 0
呀,我也正碰到了这个问题呢,同问同问。Top
相关问题
- 串口通信,比如接收6个字节,会触发两次,第一次接收6个字节,第二次接收0个字节
- 串口通信,比如接收6个字节,会触发两次,第一次接收6个字节,第二次接收0个字节
- 关于串口通讯中的ComStat.cbInQue是否能正确反映的串口接收到的字节个数
- 发送六个字节,用串口调试器sscom接收到的字节不同???
- 使用MSComm控件来串口通讯,关于接收多字节时候会截断的问题
- 串口利用modbus向寄存器请求数据,返回一个4字节的浮点数,我接收后如何组成浮点数
- 求教:有关串口通信问题:下位机每5ms发送一帧32字节大小数据到pc,如何接收?谢谢谢
- 串口接收数据的问题?
- 串口接收数据如何处理?
- 串口数据怎么接收????????




