流控的概念 发送端数据发送速度过快,导致接收端的缓冲区数据还没有被读出而发送端发送过来的数据覆盖了原有缓冲区的数据而提出的一种流量控制方法; 主要为了解决常用的串口通信中,由于缺少时钟线,当速度不匹配、处理能力不匹配时容易出现数据丢失的情况。 硬件流控 (1)当DeviceA为发送端的时候,决定DeviceA能不能发送数据的是接收端DeviceB的RTS,在接收端DeviceB我们一般设置一个缓冲区,然后设置2个标志位,分别为ok,和no,ok一般为缓冲区大小的25%,no为缓冲区大小的75;如果当前缓冲区的数据量小于ok那么DeviceB就将RTS置为高电平从而让DeviceA中的RTS为高电平,表示DeviceA可以发送数据给DviceB;如果当前缓冲区的数据量大于no那么就将RTS置为低电平从而让DeviceA中的RTS为低电平,表示DeviceB不可以再继续发送到数据DeviceB; (2)当DeviceB为发送端的时候,决定DeviceB能不能发送数据的是接收端DeviceA的RTS,在接收端DeviceA我们一般设置一个缓冲区,然后设置2个标志位,分别为ok,和no,ok一般为缓冲区大小的25%,no为缓冲区大小的75;如果当前缓冲区的数据量小于ok那么DeviceA就将RTS置为高电平从而让DeviceA中的RTS为高电平,表示DeviceB可以发送数据给DviceA;如果当前缓冲区的数据量大于no那么就将RTS置为低电平从而让DeviceB中的RTS为低电平,表示DeviceB不可以再继续发送数据到DeviceA; 软件控制流 软件流控是以特殊的字符来代表从机已经不能再接收新的数据了,在硬件不变的情况下(无CTS/RTS),当接收端缓冲区达到预设最大值时接收端的TX会主动发送一个字符到发送端来表示停止发送,发送的特殊字符本质也是发送了一次数据起到流控的作用。