主题:串口通信

  共有30773人关注过本帖    
xxq2012
1楼


串口通信  发帖心情 Post By:2012-5-17 9:41:00   [只看该作者]

ClearCommError( lpSerial->m_hSer, &dwReadError, &cmStat );
nWillLen = cmStat.cbInQue;
为什么当串口有数据主动上送时,串口接收线程收到的字节数是128的,而不是8个字节触发的

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
lqk
2楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2012-5-17 13:14:00   [只看该作者]

不太清楚你讲的问题,请描述具体一点。

  单帖管理 | 引用 | 回复 回到顶部
xxq2012
3楼


  发帖心情 Post By:2012-5-17 13:31:00   [只看该作者]

EM9360 串口接收下面终端上送的数据,数据很多,我断点设在nWillLen = cmStat.cbInQue;语句的下一条,监测收到的数据长度,每次收到的nWillLen  =0x00000080,就是数据长度达到了128个字节了,而不是8个字节

  单帖管理 | 引用 | 回复 回到顶部
x10
4楼


  发帖心情 Post By:2012-5-17 14:20:00   [只看该作者]

EM9360板上的串口是DMA驱动的,其buffer长度为128字节,所以当连续接收的数据超过128个字节,就会在128字节是产生中断(DMA buffer切换),若发送的字节小于128字节,接收在3个字节长度的时间没有进一步的数据时,会产生超时中断,这时应用程序就会收到不是128字节的数据的。

  单帖管理 | 引用 | 回复 回到顶部
xxq2012
5楼


  发帖心情 Post By:2012-5-17 14:26:00   [只看该作者]

去年我调试的时候是收到8个字节就触发了nWillLen =0x00000008,现在是板子改了啊?

  单帖管理 | 引用 | 回复 回到顶部
x10
6楼


  发帖心情 Post By:2012-5-17 14:44:00   [只看该作者]

是修改了buffer长度,这样可提高效率,适应更高波特率的应用。这个对你有什么不利的影响吗?

  单帖管理 | 引用 | 回复 回到顶部
xxq2012
7楼


  发帖心情 Post By:2012-5-17 14:48:00   [只看该作者]

呵呵,我原来接收数据部分的代码得修改了

  单帖管理 | 引用 | 回复 回到顶部
admin
8楼


  发帖心情 Post By:2012-5-18 14:50:00   [只看该作者]

串口驱动程序提供的数据是一种流式的数据,应用程序的接收线程需要对原始数据进行格式分析,才能提取出符合应用需要的应用数据包供上层使用。比方应用数据包有n个字节,格式为0x55,0xaa, {真正的数据},chksum。这时接收线程需要识别整个数据结构,并做校验和,这样才能得到可靠的应用数据包。如果用收到n个字节就作为应用数据包,可以但肯定不可靠。因为一旦传送过程出点错,那就会连续好几帧数据的丢失。

  单帖管理 | 引用 | 回复 回到顶部
xxq2012
9楼


  发帖心情 Post By:2012-5-30 16:14:00   [只看该作者]

下面设备不停的发送数据上来,完整的数据帧是以3个EB 90为同步字头,帧内包括数据长度字节,数据的提取,处理你们有相关的代码和例程吗,能发给我一份作参考吗,请发送到414595534@QQ.com,谢谢!

  单帖管理 | 引用 | 回复 回到顶部
x10
10楼


  发帖心情 Post By:2012-5-31 8:28:00   [只看该作者]

我们没有统一的数据帧提取方法,原则是把接收线程做成一个状态机,根据具体的帧结构会有发现相应的简化算法。

  单帖管理 | 引用 | 回复 回到顶部
xxq2012
11楼


  发帖心情 Post By:2012-6-1 15:09:00   [只看该作者]

那恢复成原来8个字节触发的方式行吗?通过烧写内核,发个老版本的内核给我,谢谢

  单帖管理 | 引用 | 回复 回到顶部
x10
12楼


  发帖心情 Post By:2012-6-2 19:43:00   [只看该作者]

写解析应当很容易的。就是
switch(state)
{
case 0:
   if(buf[i] == 0xEB)
      state = 1:
   break;
....
}
类似上面的流程。对串口数据通讯的程序,应用数据包的提取应当是最基本的。否则通讯过程肯定是不稳定的,这与8字节buffer还是128字节buffer没关系。
如果一定希望要收8个,自然成组,建议发送8个字节后,停4个字节的时间,再发。这样你肯定就能收到8个字节了。

  单帖管理 | 引用 | 回复 回到顶部

返回首页

串口通信

用户名:
            验证码: 验证码,看不清楚?请点击刷新验证码
内容: