同步异步通信和程式编写中的同步异步

一、硬件层次上的同步与异步
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 检测线路状态。
例如:Socket的同步模式和异步模式

如果应用程序在执行期间只需要一个线程,请使用下面的方法,这些方法适用于同步操作模式。

  • 如果当前使用的是面向连接的协议(如 TCP),则服务器可以使用 Listen 方法侦听连接。Accept 方法处理任何传入的连接请求,并返回可用于与远程主机进行数据通信的 Socket。可以使用此返回的 Socket 来调用 SendReceive 方法。如果要指定本地 IP 地址和端口号,请在调用 Listen 方法之前先调用 Bind 方法。如果您希望基础服务提供程序为您分配可用端口,请使用端口号 0。如果希望连接到侦听主机,请调用 Connect 方法。若要进行数据通信,请调用 SendReceive 方法。

  • 如果当前使用的是无连接协议(如 UDP),则根本不需要侦听连接。调用 ReceiveFrom 方法可接受任何传入的数据报。使用 SendTo 方法可将数据报发送到远程主机。

      若要在执行过程中使用单独的线程处理通信,请使用下面的方法,这些方法适用于异步操作模式。

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值