使用python / pyserial输出更精确的延迟消息

时间:2016-04-25 17:33:44

标签: python serial-port sleep pyserial

我使用time.sleep(0.01..)来获得serial.write(buffer)之间的延迟,就像那样:

while True: 
  s.write(command) 
  time.sleep(0.01)

这样可以正常工作,但如果睡眠arg小于约0.015秒,则会在外部接口上显示一些消息而没有延迟。

有没有更好的解决方案来获得更精确的python计时。

我用它来测试嵌入式设备及其串行接口。我知道我正在使用python(和操作系统),所以没有实时的时间。但这种方法非常简单灵活。所以如果可能的话我会改进它。

1 个答案:

答案 0 :(得分:0)

如果你不介意旋转/燃烧一点CPU而不是睡觉,你可以利用time.time()结果的(或多或少精确)usec分辨率,这些都是这样的:< / p>

import time

def usec_sleep(sleep_time_in_usec):

    start_time = time.time() * 1000000
    end_sleep = start_time + sleep_time_in_usec

    # regular sleep until ~20 msec before end_sleep
    sleep_time_minus_20_msec = end_sleep - start_time - 20000
    if sleep_time_minus_20_msec > 0:
        time.sleep(sleep_time_minus_20_msec/1000000)

    # spinning (for better precision) for the last up to ~20 msec
    while time.time() * 1000000 < end_sleep:
        pass