Auto Flow Control (AFC) 自动流控制:
流控制在串行通讯中的作用

这里讲到的“流”,当然指的是数据流。数据在两个串口之间传输时,常常会出现丢失数据的现象,或者两台计算机的处理速度不同,如台式机与单片机之间的通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。现在我们在网络上通过MODEM进行数据传输,这个问题就尤为突出。流控制能解决这个问题,当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程,防止数据的丢失。 PC机中常用的两种流控制是硬件流控制(包括RTS/CTS、DTR/CTS等)和软件流控制XON/XOFF(继续/停止),下面分别说明。

1.硬件流控制
硬件流控制常用的有RTS/CTS流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制。硬件流控制必须将相应的电缆线连上,用RTS/CTS(请求发送/清除发送)流控制时,应将通讯两端的RTS、CTS线对应相连,数据终端设备(如计算机)使用RTS来起始调制解调器或其它数据通讯设备的数据流,而数据通讯设备(如调制解调器)则用CTS来起动和暂停来自计算机的数据流。这种硬件握手方式的过程为:我们在编程时根据接收端缓冲区大小设置一个高位标志(可为缓冲区大小的75%)和一个低位标志(可为缓冲区大小的25%),当缓冲区内数据量达到高位时,我们在接收端将CTS线置低电平(送逻辑0),当发送端的程序检测到CTS为低后,就停止发送数据,直到接收端缓冲区的数据量低于低位而将CTS置高电平。RTS则用来标明接收设备有没有准备好接收数据。
常用的流控制还有还有DTR/DSR(数据终端就绪/数据设置就绪)。我们在此不再详述。

2.软件流控制
由于电缆线的限制,我们在普通的控制通讯中一般不用硬件流控制,而用软件流控制。一般通过XON/XOFF来实现软件流控制。常用方法是:当接收端的输入缓冲区内数据量超过设定的高位时,就向数据发送端发出XOFF字符(十进制的19或Control-S,设备编程说明书应该有详细阐述),发送端收到XOFF字符后就立即停止发送数据;当接收端的输入缓冲区内数据量低于设定的低位时,就向数据发送端发出XON字符(十进制的17或Control-Q),发送端收到XON字符后就立即开始发送数据。一般可以从设备配套源程序中找到发送的是什么字符。

当软件里用了流控制时,应做详细的说明,如何接线,如何应用。应该注意,若传输的是二进制数据,标志字符也有可能在数据流中出现而引起误操作,这是软件流控制的缺陷,而硬件流控制不会有这个问题。
 
ARM 的FIFO机制,数据缓冲区
看来许多人还没有真正理解FIFO的作用和优点,仍然停留在每收发一个字符就要中断处理一次的老思路上。UART收发FIFO主要是为了解决收发中断过于频繁而导致的CPU效率不高的问题。  FIFO的必要性。在进行UART通信时,中断方式比轮询方式要简便且效率高。但是,如果没有收发FIFO,则每传输一个数据(5~8位)都要中断处理一次,效率仍然不高。如果有了收发FIFO,则可以在连续收发若干个数据(可多至14个)后才产生一次中断,然后一起处理。这就大大提高了收发效率。  接收超时问题。如果没有接收超时功能,则在对方已经发送完毕而接收FIFO未填满时并不会触发中断(FIFO满才会触发中断),结果造成最后接收的有效数据得不到处理的问题。有了接收超时功能后,如果接收FIFO未填满而对方发送已经停,则在不超过3个数据的接收时间内就会触发超时中断,因此数据会照常得到处理。  总之,FIFO的设计是优秀而合理的,它已经帮你想到了收发过程中存在的任何问题,只要初始化配置UART后,就可以放心收发了,FIFO和中断例程会自动搞定一切!  完全不必要担心FIFO大大减少了中断产生的次数而“可能”造成数据丢失的问题!  发送时,只要发送FIFO不满,数据只管往里连续放,放完后就直接退出发送子程序。随后,FIFO真正发送完成后会自动产生中断,通知主程序说:我已经完成真正的发送。  接收时,如果对方是连续不间断发送,则填满FIFO后会以中断的方式通知主程序说:现在有一批数据来了,请处理。  如果对方是间断性发送,也不要紧,当间隔时间过长时(2~3个字符传输时间),也会产生中断,这次是超时中断,通知主程序说: 对方可能已经发送完毕,但FIFO未满,也请处理。

Auto Flow Control (AFC) 自动流控制 与 FIFO相关推荐

  1. UART串口流控制(Flow control)

    一般在串行通讯中,我们会在一些上位机上看到 RTS /CTS.DTR /DSR和 XON /XOFF的选项,这是对流控制的选项,一般是应用于 RS232接口的,是拿来调制解调器的数据通讯的 一.流控制 ...

  2. ActiveMq生产者流量控制(Producer Flow Control)

    最近学习ActiveMq,昨日查看其配置文件activemq.xml的时候,被一行注释引到了http://activemq.apache.org/producer-flow-control.html页 ...

  3. 【RoCE】Flow Control

    概览 RoCE可以实现lossless无损网络环境,在二层网络上做到可靠网络传输,从而对原本在光纤网络环境下的应用在以太网环境下提供相同的服务,而不必对应用逻辑和上层协议更改.实现无损的方法有Glob ...

  4. Credit-based Flow Control的前世今生

    撰文 | 乔晶.姚迟 1 OneFlow 中的流控 OneFlow 团队此前发布的<仅此一文让您掌握OneFlow框架的系统设计>介绍了 OneFlow 是通过背压机制解决流控问题的.文中 ...

  5. ActiveMQ Message Cursors、Async Sends、Optimized Acknowledgement、Producer Flow Control

    概述 ActiveMQ发送持久消息的典型处理方式是:当消息的消费者准备就绪时,消息发送系统把存储的消息按批次发送给消费者,在发送完一个批次的消息后,指针的标记位置指向下一批次待发送消息的位置,进行后续 ...

  6. Secure Autonomous Cyber-Physical Systems Through Verifiable Information Flow Control 论文报告

    一.论文信息 标题:Secure Autonomous Cyber-Physical Systems Through Verifiable Information Flow Control 作者:Je ...

  7. flow control

    PCIE每个Virtual Channel都维护一个独立的Flow Control Credit Pool.发送端要发送TLP,首先得获得Credit.Flow Control对3种TLP有效: 1. ...

  8. PCIe系列专题之二:2.5 Flow Control缓存架构及信用积分

    一.故事前传 之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-based layered protocol),主要包括事务层(Transacti ...

  9. ubuntu18 编译maplab opencv3_catkin 时出现Flow control statements are not properly nested.

    问题 CMake Error at cmake/OpenCVCompilerOptions.cmake:21 (else): Flow control statements are not prope ...

  10. Weir Flow Control售予First Reserve事宜完成之后更名为Trillium Flow Technologies

    出售之后,所有产品和服务将保持不变 休斯顿--(美国商业资讯)--Trillium Flow Technologies (Trillium)即之前的Weir Flow Control (WFC),今天 ...

最新文章

  1. NumPy 高级索引
  2. Struts2学习第七课 ActionSupport
  3. 分号是c语言中,问什么C程序里总是提示缺少分号;,而明明有分号?
  4. numpy的cumsum ()函数
  5. php fastcgi,配置apache以fastcgi运行php
  6. 电路常识性概念(8)-MOS管及简单CMOS逻辑门电路原理图
  7. python语言训练教程_PYTHON零基础快乐学习之旅(K12实战训练)
  8. 信息学奥赛一本通(1256:献给阿尔吉侬的花束)
  9. 为什么许多程序员讨厌结对编程?
  10. 如何测试W5300的内部TX/RX存储器?
  11. 【机器学习】基于GBDT的数据回归及python实现
  12. Docker Kubernetes k8s 从入门到精通 阿里云实战命令
  13. 《剑指offer》第三十三题(二叉搜索树的后序遍历序列)
  14. VMPlayer安装
  15. 使用JS脚本抢腾讯云学生一元优惠券
  16. python 报错 TypeError: tuple indices must be integers or slices, not tuple
  17. 华为HCNA实验操作之常用操作命令1-10
  18. 独立站运营 | FaceBook营销神器——聊天机器人ManyChat
  19. Word | 在给毕业论文添加页眉和页脚的时候,如何略过首页和第二页
  20. 使用Highcharts来画一个简易的甘特图

热门文章

  1. HTML表格的单元格合并
  2. win7访问linux共享没有权限设置,局域网共享时提示:你没有权限访问,请与网络管理员联系...
  3. linux 升级内核和设置默认启动内核
  4. opencv31:哈里斯角检测|Harris Corner
  5. SwiftUI实战教程 第三章 土豆List
  6. 开始学习 HarmonyOS 嵌入式开发
  7. python数学符号读法大全_数学符号及读法大全
  8. 计算机cpu多大,电脑cpu多少容量
  9. 聚宽macd底背离_什么是MACD顶背离和底背离?
  10. c语言中输入123输出123321,2011年计算机等级二级C语言章节习题及答案(39)