开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (2)
master
review
master
分支 (2)
master
review
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (2)
master
review
microPython
/
docs
/
library
/
utime.rst
microPython
/
docs
/
library
/
utime.rst
utime.rst 11.25 KB
一键复制 编辑 原始数据 按行查看 历史
chenchi 提交于 2021年06月03日 16:44 +08:00 . first commit

:mod:`utime` -- time related functions

.. module:: utime
 :synopsis: time related functions

|see_cpython_module| :mod:`python:time`.

The utime module provides functions for getting the current time and date, measuring time intervals, and for delays.

Time Epoch: Unix port uses standard for POSIX systems epoch of 1970年01月01日 00:00:00 UTC. However, embedded ports use epoch of 2000年01月01日 00:00:00 UTC.

Maintaining actual calendar date/time: This requires a Real Time Clock (RTC). On systems with underlying OS (including some RTOS), an RTC may be implicit. Setting and maintaining actual calendar time is responsibility of OS/RTOS and is done outside of MicroPython, it just uses OS API to query date/time. On baremetal ports however system time depends on machine.RTC() object. The current calendar time may be set using machine.RTC().datetime(tuple) function, and maintained by following means:

  • By a backup battery (which may be an additional, optional component for a particular board).
  • Using networked time protocol (requires setup by a port/user).
  • Set manually by a user on each power-up (many boards then maintain RTC time across hard resets, though some may require setting it again in such case).

If actual calendar time is not maintained with a system/MicroPython RTC, functions below which require reference to current absolute time may behave not as expected.

Functions

.. function:: gmtime([secs])
 localtime([secs])

 Convert the time *secs* expressed in seconds since the Epoch (see above) into an
 8-tuple which contains: ``(year, month, mday, hour, minute, second, weekday, yearday)``
 If *secs* is not provided or None, then the current time from the RTC is used.

 The `gmtime()` function returns a date-time tuple in UTC, and `localtime()` returns a
 date-time tuple in local time.

 The format of the entries in the 8-tuple are:

 * year includes the century (for example 2014).
 * month is 1-12
 * mday is 1-31
 * hour is 0-23
 * minute is 0-59
 * second is 0-59
 * weekday is 0-6 for Mon-Sun
 * yearday is 1-366

.. function:: mktime()

 This is inverse function of localtime. It's argument is a full 8-tuple
 which expresses a time as per localtime. It returns an integer which is
 the number of seconds since Jan 1, 2000.

.. function:: sleep(seconds)

 Sleep for the given number of seconds. Some boards may accept *seconds* as a
 floating-point number to sleep for a fractional number of seconds. Note that
 other boards may not accept a floating-point argument, for compatibility with
 them use `sleep_ms()` and `sleep_us()` functions.

.. function:: sleep_ms(ms)

 Delay for given number of milliseconds, should be positive or 0.

.. function:: sleep_us(us)

 Delay for given number of microseconds, should be positive or 0.

.. function:: ticks_ms()

 Returns an increasing millisecond counter with an arbitrary reference point, that
 wraps around after some value.

 The wrap-around value is not explicitly exposed, but we will
 refer to it as *TICKS_MAX* to simplify discussion. Period of the values is
 *TICKS_PERIOD = TICKS_MAX + 1*. *TICKS_PERIOD* is guaranteed to be a power of
 two, but otherwise may differ from port to port. The same period value is used
 for all of `ticks_ms()`, `ticks_us()`, `ticks_cpu()` functions (for
 simplicity). Thus, these functions will return a value in range [*0* ..
 *TICKS_MAX*], inclusive, total *TICKS_PERIOD* values. Note that only
 non-negative values are used. For the most part, you should treat values returned
 by these functions as opaque. The only operations available for them are
 `ticks_diff()` and `ticks_add()` functions described below.

 Note: Performing standard mathematical operations (+, -) or relational
 operators (<, <=, >, >=) directly on these value will lead to invalid
 result. Performing mathematical operations and then passing their results
 as arguments to `ticks_diff()` or `ticks_add()` will also lead to
 invalid results from the latter functions.

.. function:: ticks_us()

 Just like `ticks_ms()` above, but in microseconds.

.. function:: ticks_cpu()

 Similar to `ticks_ms()` and `ticks_us()`, but with the highest possible resolution
 in the system. This is usually CPU clocks, and that's why the function is named that
 way. But it doesn't have to be a CPU clock, some other timing source available in a
 system (e.g. high-resolution timer) can be used instead. The exact timing unit
 (resolution) of this function is not specified on ``utime`` module level, but
 documentation for a specific port may provide more specific information. This
 function is intended for very fine benchmarking or very tight real-time loops.
 Avoid using it in portable code.

 Availability: Not every port implements this function.


.. function:: ticks_add(ticks, delta)

 Offset ticks value by a given number, which can be either positive or negative.
 Given a *ticks* value, this function allows to calculate ticks value *delta*
 ticks before or after it, following modular-arithmetic definition of tick values
 (see `ticks_ms()` above). *ticks* parameter must be a direct result of call
 to `ticks_ms()`, `ticks_us()`, or `ticks_cpu()` functions (or from previous
 call to `ticks_add()`). However, *delta* can be an arbitrary integer number
 or numeric expression. `ticks_add()` is useful for calculating deadlines for
 events/tasks. (Note: you must use `ticks_diff()` function to work with
 deadlines.)

 Examples::

 # Find out what ticks value there was 100ms ago
 print(ticks_add(time.ticks_ms(), -100))

 # Calculate deadline for operation and test for it
 deadline = ticks_add(time.ticks_ms(), 200)
 while ticks_diff(deadline, time.ticks_ms()) > 0:
 do_a_little_of_something()

 # Find out TICKS_MAX used by this port
 print(ticks_add(0, -1))


.. function:: ticks_diff(ticks1, ticks2)

 Measure ticks difference between values returned from `ticks_ms()`, `ticks_us()`,
 or `ticks_cpu()` functions, as a signed value which may wrap around.

 The argument order is the same as for subtraction
 operator, ``ticks_diff(ticks1, ticks2)`` has the same meaning as ``ticks1 - ticks2``.
 However, values returned by `ticks_ms()`, etc. functions may wrap around, so
 directly using subtraction on them will produce incorrect result. That is why
 `ticks_diff()` is needed, it implements modular (or more specifically, ring)
 arithmetics to produce correct result even for wrap-around values (as long as they not
 too distant inbetween, see below). The function returns **signed** value in the range
 [*-TICKS_PERIOD/2* .. *TICKS_PERIOD/2-1*] (that's a typical range definition for
 two's-complement signed binary integers). If the result is negative, it means that
 *ticks1* occurred earlier in time than *ticks2*. Otherwise, it means that
 *ticks1* occurred after *ticks2*. This holds **only** if *ticks1* and *ticks2*
 are apart from each other for no more than *TICKS_PERIOD/2-1* ticks. If that does
 not hold, incorrect result will be returned. Specifically, if two tick values are
 apart for *TICKS_PERIOD/2-1* ticks, that value will be returned by the function.
 However, if *TICKS_PERIOD/2* of real-time ticks has passed between them, the
 function will return *-TICKS_PERIOD/2* instead, i.e. result value will wrap around
 to the negative range of possible values.

 Informal rationale of the constraints above: Suppose you are locked in a room with no
 means to monitor passing of time except a standard 12-notch clock. Then if you look at
 dial-plate now, and don't look again for another 13 hours (e.g., if you fall for a
 long sleep), then once you finally look again, it may seem to you that only 1 hour
 has passed. To avoid this mistake, just look at the clock regularly. Your application
 should do the same. "Too long sleep" metaphor also maps directly to application
 behavior: don't let your application run any single task for too long. Run tasks
 in steps, and do time-keeping inbetween.

 `ticks_diff()` is designed to accommodate various usage patterns, among them:

 * Polling with timeout. In this case, the order of events is known, and you will deal
 only with positive results of `ticks_diff()`::

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

 * Scheduling events. In this case, `ticks_diff()` result may be negative
 if an event is overdue::

 # This code snippet is not optimized
 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)

 Note: Do not pass `time()` values to `ticks_diff()`, you should use
 normal mathematical operations on them. But note that `time()` may (and will)
 also overflow. This is known as https://en.wikipedia.org/wiki/Year_2038_problem .


.. function:: time()

 Returns the number of seconds, as an integer, since the Epoch, assuming that
 underlying RTC is set and maintained as described above. If an RTC is not set, this
 function returns number of seconds since a port-specific reference point in time (for
 embedded boards without a battery-backed RTC, usually since power up or reset). If you
 want to develop portable MicroPython application, you should not rely on this function
 to provide higher than second precision. If you need higher precision, absolute
 timestamps, use `time_ns()`. If relative times are acceptable then use the
 `ticks_ms()` and `ticks_us()` functions. If you need calendar time, `gmtime()` or
 `localtime()` without an argument is a better choice.

 .. admonition:: Difference to CPython
 :class: attention

 In CPython, this function returns number of
 seconds since Unix epoch, 1970年01月01日 00:00 UTC, as a floating-point,
 usually having microsecond precision. With MicroPython, only Unix port
 uses the same Epoch, and if floating-point precision allows,
 returns sub-second precision. Embedded hardware usually doesn't have
 floating-point precision to represent both long time ranges and subsecond
 precision, so they use integer value with second precision. Some embedded
 hardware also lacks battery-powered RTC, so returns number of seconds
 since last power-up or from other relative, hardware-specific point
 (e.g. reset).

.. function:: time_ns()

 Similar to `time()` but returns nanoseconds since the Epoch, as an integer (usually
 a big integer, so will allocate on the heap).
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

HeliosSDK microPython组件
暂无标签
MIT
使用 MIT 开源许可协议
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/quecpython/microPython.git
git@gitee.com:quecpython/microPython.git
quecpython
microPython
microPython
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /