如何使用Raspberry Pi获得更精确的时间测量?

Mik*_*han 5 python performance time raspberry-pi raspbian

最近我正在开发一个基于raspberrypi 2b +的设备,它连接到mpu9250(我自己焊接).

我可以正确读取9轴数据,但我注意到每个数据输入具有不同的时间差:

该图显示了每两个数据之间的时间差.但我已经使用QTimer确保我的代码每隔10ms读取一次mpu9250.

所以我在RaspberryPi 2b +上尝试了这个代码:

import time
import matplotlib.pyplot as plt

time_arr = []
for i in range(5000):
    t0 = time.time()
    print "K"
    t1 = time.time() - t0
    time_arr.append(t1)

plt.plot(time_arr)
plt.show()
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

即使这些简单的代码仍然在图表上显示高峰,它让我失望......

任何人都可以帮助我解决这些问题或解释发生了什么?

Dal*_*son 1

在您的第一个测试中,您使用 QTimer 它将计时器视为后台任务。QT 主要致力于提供响应式 GUI。

\n

在第二个测试中,循环中有一个打印语句——打印过程中涉及许多因素,这些因素可能会导致执行该语句所需的时间发生变化。

\n

查看threading.Timer课程以获得更好的方法。

\n

文档说:

\n
\n

此类表示仅在计时器经过 \xe2\x80\x94 一定时间后才应运行的操作。Timer 是 Thread 的子类,因此也可以作为创建自定义线程的示例。

\n

与线程一样,计时器是通过调用它们的 start() 方法来启动的。可以通过调用 cancel() 方法来停止计时器(在其操作开始之前)。

\n
\n

请注意,它还说:

\n
\n

计时器在执行其操作之前等待的时间间隔可能与用户指定的时间间隔不完全相同。

\n
\n

换句话说,它不会是完美的,但很可能比您现在看到的要好得多。

\n
\n

如果您对更高精度的时间测量而不是更高精度的调度任务感兴趣,请考虑使用time.perf_counter()Python 3 中提供的功能。

\n