我的串口程序用的是一个串口类,编译环境Visual C++ 6.0。
串口类中定义用户消息
#define WM_COMM_RXCHAR WM_USER+7 // A character was received and placed in the input buffer.
在主对话框类头文件中,声明函数:
afx_msg LONG OnCommunication(WPARAM ch,LPARAM port);
在主对话框类源文件中,完成消息映射:
ON_MESSAGE(WM_COMM_RXCHAR,OnCommunication)
消息处理函数:
LONG CSCommDlg::OnCommunication(WPARAM ch,LPARAM port)
{
完成字符的接收及一帧数据的处理
......
}
我的数据的帧结构是:
在此举个例子说明:"AA 55 00 00 04 00 03 "
其中"AA 55 "为帧头,"00 00 04 00"为数据位,转化为十进制代表1024,"03 "为校验,校验规则是把AA+55+00+00+04+00=103,取"03 "作为校验位.
我有一个如上结构帧的数据文件,该文件有3021帧.
现在的问题是当波特率选为38400bps时,接收端数据处理速度能够跟上发送速度(即能够同步),并且能数据能够实时的显示在对话框的画图区,实际接收帧数为3021帧;
但当波特率选为115200bps时,接收端数据处理速度就不能跟发送速度,当接收到1700多帧时局出现误码丢帧现象;
问题应该是由于接收处理速度慢,造成读缓冲区没读完,就被发送来的新的数据所覆盖,从而出现误码丢帧现象。
而要求波特率在460800bps时,该程序仍能工作,即实时显示数据波形。
怎样解决这个问题呢?想听听大家的意见。在此先谢过。