Pyserial我何时应该使用冲洗?

问题描述 投票:0回答:2

我正在使用pyserial,并试图在arduino板上读写数据。我看到了几个示例,这些示例表明在读写时应使用冲洗。即使阅读了pyserial文档,我也无法理解冲洗的作用。我还注意到有:

flushInput()
flushOutput()
flush()

每个人的作用是什么,为什么以及何时应该使用它。我会很高兴的解释。

python python-3.x serial-port pyserial
2个回答
0
投票

严重简化如下

pyserial(通常为串行)使用通信缓冲区(实际上为2)

一个输入[ M | M | M | | | ]

和一个输出[ | | | M | M ]

如果这些缓冲区之一已满,则该缓冲区上别无其他内容,这可能会阻止程序执行

flush ...告诉缓冲区抛出其数据,以便可以开始输入新数据


0
投票

[[pySerial API documentation的语录]

flushInput()

“从版本3.0开始不推荐使用:请参阅reset_input_buffer()”“刷新输入缓冲区,丢弃其所有内容。”

通常仅在更改串行端口参数或用于错误恢复之后使用。


flushOutput()

“从版本3.0开始不推荐使用:请参阅reset_output_buffer()“清除输出缓冲区,中止当前输出,并丢弃缓冲区中的所有内容。

注意,对于某些USB串行适配器,这可能只刷新OS的缓冲区,而不刷新USB部分中可能存在的所有数据。“

通常仅用作中止过程的一部分。


flush()

“清除类似文件的文件。在这种情况下,请等待直到所有数据都写入。”

在POSIX termios行话中,此功能称为tcdrain()。当心“冲洗”和“排水”有时(混淆)用于“等待所有传输完成”功能。但是术语“冲洗”也用于表示“丢弃”。因此,只要您看到“冲洗”一词,就应在该情况下验证其含义(即破坏性或非破坏性操作)。

在程序中通常不需要

flush()函数,尤其是在使用阻塞I / O时(即,操作系统正在缓冲所有数据,并在需要时自动让程序等待)。

© www.soinside.com 2019 - 2024. All rights reserved.