SerialPort类源代码分析

 

前几篇串口编程大致讲述了Windows下串口的大致操作,接下来分析流行的SerialPort类,它把Windows API封装好,方便开发利用

1、Win32下串口大致操作流程
(1)打开串口:CreateFile函数
(2)建立串口通信事件:CreateEvent函数
(3)初始化串口:SetCommState函数
(4)建立监视线程,即读写数据线程,因为我们不知道什么时候数据会到来,这里是一个异步事件
(5)写数据:WriteFile
(6)结束:关闭线程->停止WaitCommEvent->CloseHandle

2.SerialPort类的数据结构
大致了解操作流程后,先看一下SerialPort类,均在代码注释了
数据成员:

   

函数成员:

   

3.串口操作

(1)初始化串口

流程:检查参数-->检测线程-->创建事件(监视线程)-->打开端口-->设置异步IO结构参数,详细见代码:  

(2)监视线程的控制

先看比较简单的线程控制吧,主要有开启线程,复位和停止

   

(3)监视线程

我们把读写串口的操作全部交给监视线程,现在简单看一下监视线程的大致流程:

检查串口-->进入循环{WaitCommEvent(不阻塞询问)询问事件-->如果有事件来到-->到相应处理(关闭/读/写)}

详细代码如下:

 

(4)读取数据操作

读取数据是一个异步操作,当有数据发来时,会触发读事件m_ov.hEvent,监视线程捕捉到事件后并获知是读事件,进入相关读处理,这里调用函数ReceiveChar

,ReceiveChar中调用ReadFile函数将串口数据读到Buffer缓冲中,相关代码如下:

 

(5)写数据

也是由监视线程操作,不过触发事件交给主线程来触发,函数是WriteToPort

线程调用的函数WriteChar,把缓冲里的数据写到串口中,期间调用WriteFile

详细代码:

(6)其他操作

其他比如获取DCB,关闭等,比较简单,不做分析

代码如下:

好了,SerialPort代码分析到此为止,我水平有限,分析可能有不少问题,欢迎大家指


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/benny_cen/archive/2009/03/29/4033517.aspx

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值