MFC程序读写串口,添加串口事件读串口,数据完整性问题,求教~~

zzzzluo 2007-08-02 04:02:47
串口事件代码如下:
我把读到数据显示出来。。为什么比如我发一段句子,但是分好几次出来?有什么办法解决吗。。照理说一次串口收个百来个字节应该没问题啊~~
void CDeviceReg::OnCommDevregmscomm()
{
// TODO: 在此处添加消息处理程序代码
SetPriorityClass( GetCurrentProcess(), HIGH_PRIORITY_CLASS );
VARIANT vResponse;
int kRLen;
int i;
unsigned char DataBuf[256];
char openFileName[128];
CString temp;
//unsigned char str0d0a[2];
if (m_Mscomreg.GetCommEvent()!=2) return; //判断是否为ComEvReceive事件
kRLen = m_Mscomreg.GetInBufferCount();
if (kRLen>127)
{
kRLen = 127;
}
m_Mscomreg.SetInputLen( kRLen );
vResponse = m_Mscomreg.GetInput(); //读取接收到的数据

memset(DataBuf,0,256);
memcpy( DataBuf, vResponse.parray->pvData, kRLen);
temp.Format("%s",DataBuf);
MessageBox(temp);
}
...全文
398 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ufox 2007-08-04
  • 打赏
  • 举报
回复
读取串口就是这样,是读取的时机的问题,一般说来这样的串口传输需要你多次读取数据到某个自己的内存中,然后重新组合。用多线程也避免不了这个问题。
也不是串口参数设置的问题,要是有更多的数据,总比你设置缓冲区大怎么办呢?
ylzz_1 2007-08-04
  • 打赏
  • 举报
回复
读取串口数据这种情况是很常见的,办法就是设置比较大的缓冲区(比你要读的一帧字节),数据读上来后放到缓冲区,然后从缓冲区查找完整的一帧数据。
wfenj 2007-08-03
  • 打赏
  • 举报
回复
是否是你的串口设置参数问题,门限值设置大一点啊
zzzzluo 2007-08-03
  • 打赏
  • 举报
回复
真实硬件~~~有读串口的源码可供参考吗?~~如果用ONTIMER怎么样?
fantasyemperor 2007-08-03
  • 打赏
  • 举报
回复
你是用虚拟串口工具做的还是真实的硬件?
两者在速度上是由差别的,建议用线程等待,写入缓冲。
zzzzluo 2007-08-03
  • 打赏
  • 举报
回复
自己先把它顶上去先

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧