串口通信握手协议--XON/XOFF方法

假设电脑A和电脑B通过RS232串口通信

A 和 B协商使用软件握手协议(dcb.fOutX = TRUE), 定义XonChar / XoffChar 比如XonChar = 1,

XoffChar = 2.

现在, A向B发送字符2, B向A发送字符串"helloworld". A能收到字符串"helloworld"吗? 不行的.

B向A发送字符1后, A将会收到字符串"helloworld".

问题:是A向B发XoffChar? 还是B向A发XoffChar?

举个形像例子,李四有很多书,现在一本本的传递给张三,张三突然要去厕所,想李四暂停一会儿,于是

张三对李四说:“暂停!”,李四听到后,就停下来不再把书传给张三。
“张三”就是通信的接收端,“李四”是通信的发送端。

XoffChar的传送方向是 接收端 ——> 发送端

当张三从厕所回来后,对李四说:“我回来了,开始吧”。于是,李四把剩余的书一本一本的传递给张三

同理,XonChar的传送方向也是 接收端 ——> 发送端。


问题:发送端接收到XoffChar之后,还没有发送成功的字符由谁保管?
答:  操作系统。

串口发送信息使用WriteFile(), 如果是overlap方式,发送端收到XoffChar后,WriteFile()会返回FAILE,
GetLastError() ==  ERROR_IO_PENDING.

如果是非overlap方式,程序会在WriteFile()在停下来, 等待发送成功,当然,还要考虑到Timeout的设置.

接下来继续深入WriteFile的Overlap原理。 

你可能感兴趣的:(IO)