同步通信与异步通信以及阻塞和非阻塞之我见 [原]

一、硬件层次上的同步与异步
1.异步通信
   在异步通信中,CPU与外设之间有两项约定:
   (1)字符格式---字符的编码形式及规定,每个串行字符由以下四个部分组成:
      ⑴ 1个起始位,低电平;
      ⑵ 5--8个数据位;
      ⑶ 1个奇偶校验位;
      ⑷ 1--2个终止位(停止位)高电平; 
   (2)波特率
      波特率是指单位时间内传送二进制数据的位数,以位/秒位单位,它是衡量串行数据
    传送速度快慢的重要标志和参数。
    例如:假如数据出送速率是120位/秒,则传送的波特率为:120波特。
    注意:异步通信的传送速度一般在50波特-----19200波特之间。

2.同步通信
   在异步通信中,每个字符要用起始位和终止位作为字符开始和结束的标志,占用了一些时间,为了提高数据块的传送速度,就要设法去掉这些标志,就采用同步通信。
   同步通信的速度可达500千波特。但是它的硬件电路比较复杂。

3.优缺点比较
1)异步通信简单,双方时钟可允许一定误差。同步通信较复杂,双方时钟的允许误差较小。
2)通信效率:异步通信低,同步通信高。
3)同步通信取消了每个字节的同步位,从而使数据位在传送为中所占比率增大,提高了传送效率。
4)同步通信容许用户传送没有意义的二进制数据,即在没有信息要传输时,要填上空字符,因为同步传输不允许有间隙。

二、软件层次的同步与异步
1.同步通信:
一般使用单线程,读操作和写操作都在同一个线程里面,读操作时不会写,写操作时不会读,此时硬件处于半双工模式。

2.异步通信
一般使用多线程,读操作和写操作在不同的线程里面,读操作和写操作同时进行,当读或写完成时使用事件通知,此时硬件处于全双工模式。
用异步方式操作串口必须要定义 OVERLAPPED 结构,其中的 hEvent 必须自己建立,要定义两个 OVERLAPPED 结构,一个用于读一个用于写,当然也必须建立两个 Event,把它们放入 OVERLAPPED.hEvent。
一般我们是在主线程中写数据,因为写是我们可以控制的,而读的时候我们不知道数据什么时候会到,所以要建立一个线程专门用来读数据,在这个线程中,我们循环地用 ReadFile 读串口,同时用 WaitCommEvent 检测线路状态。

三、软件层次的阻塞和非阻塞模式
1.阻塞模式:
    阻塞模式执行I/O操作完成前会一直进行等待,不会将控制权交给程序,一般可以设置一个超时结构,超时时间到则返回超时,可以通过多线程技术进行处理。

2.非阻塞模式
    非阻塞模式执行I/O操作后会立即返回,而不管读写有没有成功,一般在进行I/O操作前可以通过一些异步模型(如socket通信里面的select模型)来查询通信口的当前状态是否可读或可写。

posted on 2008-04-23 16:35  highmayor  阅读(2106)  评论(0编辑  收藏  举报

导航