Serial port termios:XON/XOFF握手

Serial port termios:XON/XOFF握手,serial-port,Serial Port,我正在尝试使用XON/XOFF软件握手发送数据,以便接收器可以使用控制字符控制数据流 要启用用于发送数据的流控制,我执行了以下操作: tcgetattr(fd和选项);//读取当前选项 options.c_cflag |=IXON;//在输出上启用XON流量控制 tcSetTTR(fd、TCSANOW和选项);//设置新选项 程序获取一个文件,并将其逐字节发送到串行接口。 奇怪的是,当接收到默认停止(0x13)时,程序继续发送数据。 检查VSTOP的值时,返回0x09。但是这个(0x09)对于停

我正在尝试使用XON/XOFF软件握手发送数据,以便接收器可以使用控制字符控制数据流

要启用用于发送数据的流控制,我执行了以下操作:

tcgetattr(fd和选项);//读取当前选项
options.c_cflag |=IXON;//在输出上启用XON流量控制
tcSetTTR(fd、TCSANOW和选项);//设置新选项

程序获取一个文件,并将其逐字节发送到串行接口。 奇怪的是,当接收到默认停止(0x13)时,程序继续发送数据。 检查VSTOP的值时,返回0x09。但是这个(0x09)对于停止也不起作用

有人知道如何让这个XON/XOFF与termios一起工作吗

谢谢

-Sören

如果收到XOFF,发送方不需要立即停止。它仍然可以冲洗它的输出喷气机。因此,当接收器仍有足够的空间接收更多数据(例如,30字节空闲)时,它应该已经发送XOFF


VSTOP只是一个标志(因此是一个任意整数,在不同的平台上变化),而不是XOFF的ASCII字符。

我理解。我还尝试在发送ech字节后添加1ms的延迟。不起作用。我的应用程序的另一个方法是将输出缓冲区的大小限制为5字节。这是如何实现的?在我(长期)使用串行通信的经验中,发送方在收到XOFF后会立即停止发送,尽管在处理之前可能会有几个字节溜走,这就是为什么在PC-AT中,对于80386处理器,建议使用带有16550 UART芯片的单独串行IO卡的原因。VSTOP应为0x13或ctrl-S;
stty-a
(必要时修改设备)显示了什么?我突然想到,为
VSTOP
找到的
0x09
是特殊字符数组的索引。您应该检查
options.c_cc[VSTOP]
以查看VSTOP字符的实际值。