utime
utime 模块提供获取当前日期时间、测量时间间隔以及延时等功能。
函数
sleep(seconds)
睡眠给定秒数。可使用浮点数睡眠小数秒,或使用 sleep_ms() 和 sleep_us()。
sleep_ms(ms)
延时给定毫秒数,应为正数或 0。
sleep_us(us)
延时给定微秒数,应为正数或 0。
ticks_ms()
返回递增的毫秒计数器,参考点任意,达到某值后会回绕。
ticks_us()
与上文 ticks_ms() 类似,但单位为微秒。
ticks_add(ticks, delta)
将 tick 值偏移给定数量,可正可负。给定 tick 值后,可按 tick 值的模运算定义,计算其之前或之后 delta tick 处的 tick 值。
示例:
# 找出 100 ms 前的 tick 值
print(ticks_add(time.ticks_ms(), -100))
# 计算操作截止时间并检测
deadline = ticks_add(time.ticks_ms(), 200)
while ticks_diff(deadline, time.ticks_ms()) > 0:
do_a_little_of_something()
# 找出本端口使用的 TICKS_MAX
print(ticks_add(0, -1))
ticks_diff(ticks1, ticks2)
测量 ticks_ms() 或 ticks_us() 返回值之间的 tick 差值,为有符号值,可能回绕。
参数顺序与减法运算符相同,ticks_diff(ticks1, ticks2) 与 ticks1 - ticks2 含义相同。
ticks_diff() 设计用于多种用法模式,包括:
带超时的轮询。 此情况下事件顺序已知,你只会处理 ticks_diff() 的正结果:
# 等待 GPIO 引脚被置位,但最多 500 µs
start = time.ticks_us()
while pin.value() == 0:
if time.ticks_diff(time.ticks_us(), start) > 500:
raise TimeoutError
调度事件。 此情况下,若事件已过期,ticks_diff() 结果可能为负:
# 此代码片段未优化
now = time.ticks_ms()
scheduled_time = task.scheduled_time()
if ticks_diff(scheduled_time, now) > 0:
print("Too early, let's nap")
sleep_ms(ticks_diff(scheduled_time, now))
task.run()
elif ticks_diff(scheduled_time, now) == 0:
print("Right at time!")
task.run()
elif ticks_diff(scheduled_time, now) < 0:
print("Oops, running late, tell task to run faster!")
task.run(run_faster=true)