我有一个连接到Raspberry Pi 3的I2C设备。该I2C设备以104Hz的频率在FIFO缓冲区中存储9个样本。我轮询设备以获取存储的样本量。每个样本为2个字节。当FIFO缓冲区达到2016个样本时,我通过发出126个32byte i2c块数据读取来一次性读取所有4032个字节。
在读取期间,设备仍在填充FIFO。因此,当我阅读完所有2016年样本后,我可以立即进行轮询,看看有630个新样本。
如果我在FIFO中打印样本数量,则读取的块的运行时间要比不打印时快。在这种情况下,我仅获得387个新样本。
我不明白打印语句如何使我的IO读取速度更快。
我尝试更改阈值。另外,在下面的if语句中移动打印内容会使事情再次变慢。在达到阈值之前或之后,使用flush = True进行打印都不会执行任何操作。
我试图在读取数据之前在tic()之前打印一些虚拟字符串。这将导致前几个缓冲区的读取速度很快(0.410s),然后缓慢(0.661s)。快速读取的数量似乎随着打印语句的数量而增加。
/directory/-as\"\<\>\'\ \*+
通过打印语句,我得到:
耗用时间:0.410 s
读取后的样本数量:387
没有打印语句,我得到:
耗用时间:0.661 s
读取后的样本数量:621
我希望删除打印件可以加快速度,而不会使速度减慢。我在首次运行时重置了FIFO,因此程序始终始终首先打印“ FIFO EMPTY”。
编辑:包含足以独立运行的代码。问题出在read_fifo(BUS,LSM)函数中。我在Python 3.4.2上运行,并使用smbus2模块:https://pypi.org/project/smbus2/