1. 文档中心
  2. 比卜创造 Micro:bit
  3. API 参考
  4. utime

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)