查看: 789|回复: 0
打印 上一主题 下一主题

MicroPython 标准库 utime

[复制链接] qrcode

35

主题

44

帖子

127

积分

注册会员

Rank: 2

积分
127
楼主
跳转到指定楼层
发表于 2016-7-15 10:19 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
utime – 时间函数库

utime 库提供获取时间和日期、测量时间间隔、延时等功能。

初始时刻: Unix 使用 POSIX 系统标准,从 1970-01-01 00:00:00 UTC开始。嵌入式程序从 2000-01-01 00:00:00 UTC 开始。

日期/时间: 需要一个实时时钟 (RTC)。在底层系统 (包括一些 RTOS 中),RTC 已经包含在其中。设置时间是通过 OS/RTOS 而不是 MicroPython 完成,查询日期/时间也需要通过系统 API。对于裸板系统时钟依赖于 machine.RTC() 对象。设置时间通过 machine.RTC().datetime(tuple) 函数,并通过下面方式维持:
  • 后备电池 (可能是选件、扩展板等)。
  • 使用网络时间协议 (需要用户设置)。
  • 每次上电时手工设置 (大部分只是在硬复位时需要设置,少部分每次复位都需要设置)。

如果实际时间不是通过系统/MicroPython RTC维持,那么下面函数结果可能不是和预期的相同。

函数

  • utime.localtime([secs])
    从初始时间的秒转换为元组: (年, 月, 日, 时, 分, 秒, 星期, yearday) 。如果 secs 是空或者 None,那么使用当前时间。
    年包括了 (如 2014).
    月是 1-12
    日是 1-31
    小时是 0-23
    分钟是 0-59
    秒是 0-59
    星期是 0-6 代表周一到周日
    yearday 是 1-366

  • utime.mktime()
    时间的反函数,它的参数是完整8参数的元组,返回值是从 Jan 1, 2000开始的秒数。

  • utime.sleep(seconds)
    休眠指定的时间(秒),Seconds 可以是浮点数。注意有些版本的 MicroPython 不支持浮点数,为了兼容可以使用 sleep_ms() 和 sleep_us() 函数。

  • utime.sleep_ms(ms)
    延时指定毫秒,参数不能小于0。

  • utime.sleep_us(us)
    延时指定微秒,参数不能小于0。

  • utime.ticks_ms()
    返回不断递增的毫秒计数器,在某些值后会重新计数(未指定)。计数值本身无特定意义,只适合用在 ticks_diff().

  • utime.ticks_us()
    和上面类似,只是返回微秒。

  • utime.ticks_cpu()
    和 ticks_ms/ticks_us 类似,具有更高精度 (使用 CPU 时钟)。

  • utime.ticks_diff(old, new)
    计算两次调用 ticks_ms(), ticks_us(), 或 ticks_cpu()之间的时间。因为这些函数的计数值可能会回绕,所以不能直接相减,需要使用 ticks_diff() 函数。“旧” 时间需要在 “新” 时间之前,否则结果无法确定。这个函数不要用在计算很长的时间 (因为 ticks_*() 函数会回绕,通常周期不是很长)。通常用法是在带超时的轮询事件中调用:

# Wait for GPIO pin to be asserted, but at most 500us
start = time.ticks_us()
while pin.value() == 0:
    if time.ticks_diff(start, time.ticks_us()) > 500:
        raise TimeoutError

  • utime.time()
    返回从开始时间的秒数(整数),假设 RTC 已经按照前面方法设置好。如果 RTC 没有设置,函数将返回参考点开始计算的秒数 (对于 RTC 没有后备电池的板子,上电或复位后的情况)。如果你开发便携版的 MicroPython 应用程序,你不要依赖函数来提供超过秒级的精度。如果需要高精度,使用 ticks_ms() 和 ticks_us() 函数。如果需要日历时间,使用不带参数的 localtime() 是更好选择。

    与 CPython 的不同
    在 CPython 中,这个函数用浮点数返回从 Unix 开始时间(1970-01-01 00:00 UTC)的秒数,通常是毫秒级的精度。在 MicroPython 中,只有 Unix 版才使用相同开始时间,如果允许浮点精度,将返回亚秒精度。嵌入式硬件通常没有用浮点数表示长时间访问和亚秒精度,所以返回值是整数。一些嵌入式系统硬件不支持 RTC 电池供电方式,所以返回的秒数是从最后上电、或相对某个时间、以及特定硬件时间 (如复位)。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表