MFC读串口如何显示有效数据

MFC读串口怎么显示有效数据?
本帖最后由 VisualEleven 于 2013-08-09 09:18:46 编辑
DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
DWORD SIZE;
unsigned char buff[50];
memset(buff, 0, sizeof(buff));
while(true)
{
bReadStat= ReadFile(hcom,buff,22,&SIZE,NULL);//这里有问题吗?
if(bReadStat)
{
if(m_bDisplay)
{
CString temp;
for(int i=0;i<sizeof(buff);i++)
{
temp.Format(_T("%02X "),buff[i]);
AppendText((BYTE*)temp.GetBuffer(0),24,,RGB(255, 0,0));//显示到编辑框 }    
}
}
PurgeComm(hcom, PURGE_TXABORT|
PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
}

}

串口返回的数据的长度是不定的,有时候1位,有时候22位,我这么写只能显示固定的位数,比如返回02 01 02 0E 51 13 00 00 3C 00 02 00 00 00...,凑足22位,怎么得到实际的长度呢?无效的不显示,另外没有数据返回时就全部显示00,怎么控制无数据时不显示呢?

------解决方案--------------------
首先你的明确怎么样的数据代表是有效的数据?
什么样的方式或数据作为起头? 
------解决方案--------------------
你改成来一个字符就接收一次,然后把接收的数据都放在缓冲区里,从缓冲区里根据协议进行分析处理
------解决方案--------------------
引用:
你改成来一个字符就接收一次,然后把接收的数据都放在缓冲区里,从缓冲区里根据协议进行分析处理

+1
你定义个全局或static变量,用于判断是否要显示到编辑框中
------解决方案--------------------
自己定义协议帧,含帧头帧尾,把读取到的所有数据放到自己另外定义的一个缓冲区里,然后自己从缓冲区解析,根据帧头和帧尾解析出一个完整的数据帧。通用的方法都是这么做的,一次读取一个字符效率太低了,如果数据少还可以考虑下