添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
力能扛鼎的吐司  ·  6月30日 ...·  2 月前    · 
愉快的眼镜  ·  Windows+银河麒麟 V10 ...·  5 月前    · 
串口通讯与超时设置 在WINDOWS NT4.0 以上操作系统中,串口通讯有2种模式:同步方式和异步方式。由 CreateFile 中的 dwFlagsAndAttributes 参数决定, 若指定 FILE_FLAG_OVERLAPPED 标志则为异步方式,否则为同步方式。当为同步模式时,调用 ReadFile WriteFile 会阻塞调用线程直到读完或写完指定量的数据才返回,这样就有可能出现无法退出程序的现象,解决方法是为读写操作设置超时,注意这种超时指的是 ReadFile WriteFile 函数的返回时间,仅对同步模式有效。代码如下
1 // 以下m_pComPort为本人自己封装的C++串口类CComPort的指针
3 // FALSE表示以同步方式打开
4 m_pComPort -> Open( 2 , FALSE, 38400 );
6 // 设置读写超时为5秒
7 COMMTIMEOUTS  timeout = { 0 } ;
8 timeout.ReadTotalTimeoutConstant = 5000 ;
9 timeout.WriteTotalTimeoutConstant = 5000 ;
10 m_pCommPort -> SetTimeouts(timeout);
12 char szData[ 1024 ] = { 0 } ;
13 // 读数据
14 DWORD dwRet = m_pCommPort -> ReadComm(szData, 1024 );
15 // 写数据
16 dwRet = m_pCommPort -> WriteComm(szData, 1024 );
17 // 关闭串口
18 m_pCommPort -> Close();
当为异步模式时,由于读写操作会立即返回,因此设置超时指的是设置等待操作完成的时间,而不是 ReadFile WriteFile 函数返回的时间,代码如下
1 // 以下m_pComPort为本人自己封装的C++串口类CComPort的指针
3 // TRUE表示以异步方式打开
4 m_pComPort -> Open( 2 , TRUE, 38400 );
6 // 设置读写等待超时为5秒
7 char szData[ 1024 ] =
这里的 ReadComm WriteComm 的实现内部针对不同模式作了不同处理,异步模式时即调用了 WaitForSingleObject 等待函数来设置超时。同步模式时即调用不带重叠结构的 ReadFile WriteFile 函数来接收或发送指定量的数据。另外在这介绍下串口虚拟软件vspd,这个软件能模拟在同一台计算机上进行两个串口的通讯,有利于没有实际设备情况下的串口调试。
posted on 2009-04-17 19:15 春秋十二月 阅读(4365) 评论(0) 编辑 收藏 引用 所属分类: C/C++