我正在使用pyserial与arduino板进行数据的读写。我看到一些示例显示在读写时应该使用flush。即使阅读了pyserial文档,我仍然不理解flush的作用。我还注意到有:
flushInput()
flushOutput()
flush()
每个角色的作用是什么,为什么以及何时应该使用它。我需要解释一下。
我正在使用pyserial与arduino板进行数据的读写。我看到一些示例显示在读写时应该使用flush。即使阅读了pyserial文档,我仍然不理解flush的作用。我还注意到有:
flushInput()
flushOutput()
flush()
[来自pySerial API文档的引用]
flushInput()
"自3.0版本以后已弃用:请参见reset_input_buffer()"
"清空输入缓冲区,丢弃其所有内容。"
通常仅在更改串口参数(例如端口初始化)或出现错误时使用。
flushOutput()
"自3.0版本起已弃用:请参阅reset_output_buffer()"
"清除输出缓冲区,中止当前输出并丢弃缓冲区中的所有内容。
注意,对于某些USB串行适配器,这可能仅会刷新操作系统的缓冲区,并非所有可能存在于USB部分的数据。"
通常只作为中止过程的一部分使用。
flush()
"文件流刷新函数。在此情况下,等待所有数据被写入。"
在 POSIX termios 术语中,此函数称为 tcdrain()。
请注意,“flush”和“drain”有时(令人困惑地)交替使用于“等待所有传输完成”的功能。
但术语“flush”也可以用来表示“丢弃”(例如,旧的 flushXput() 函数名称中)。
例如,请注意在 pySerial API 文档中重命名两个函数以减少混淆后,“flush”一词的持续不一致使用。
因此,每当您看到单词“flush”时,都应验证在该上下文中它意味着什么(即破坏性丢弃或非破坏性等待操作)。
flush()函数通常在程序中不需要使用,特别是当使用阻塞I/O时(即操作系统正在缓冲所有数据,并且将自动高效地使您的程序等待必要的时间)。
使用操作系统时,您的程序与串口接收和传输数据的异步执行。仅在异常情况下(例如初始化、错误恢复或软件半双工)时,您的程序需要显式地与实际数据传输进行同步。
pyserial(串行通信)使用通信缓冲区(实际上有两个)
一个用于输入[ M | M | M | | | ]
另一个用于输出[ | | | M | M ]
如果其中一个缓冲区已满,则无法在该缓冲区上执行其他操作,并且可能会阻止程序执行
刷新...告诉缓冲区丢弃其数据,以便新数据可以开始进入