03-Basic_Module.md 12 KB

RT-Thread MicroPython 基础模块

Basis Module

下面是 micropython 的基本模块,运用这些模块,你可以使用 MicroPython 的基本功能。

rtthread – 系统相关函数

rtthread 模块提供了与 rt-thread 操作系统相关的功能,如查看栈使用情况等。

  • rtthread.current_tid() 返回当前线程的 id 。

  • rtthread.is_preempt_thread() 返回是否是可抢占线程。

  • rtthread.stacks_analyze() 返回当前系统线程和栈使用信息。

example:

>>> import rtthread
>>> 
>>> rtthread.is_preempt_thread()       # determine if code is running in a preemptible thread
True
>>> rtthread.current_tid()             # current thread id
268464956
>>> rtthread.stacks_analyze()          # show thread information
thread     pri  status      sp     stack size max used left tick  error
---------- ---  ------- ---------- ----------  ------  ---------- ---
elog_async  31  suspend 0x000000a8 0x00000400    26%   0x00000003 000
tshell      20  ready   0x00000260 0x00001000    39%   0x00000003 000
tidle       31  ready   0x00000070 0x00000100    51%   0x0000000f 000
SysMonitor  30  suspend 0x000000a4 0x00000200    32%   0x00000005 000
timer        4  suspend 0x00000080 0x00000200    25%   0x00000009 000
>>> 

utime – 时间相关函数

utime 模块提供获取当前时间和日期、测量时间间隔和延迟的功能。

更多内容可参考 time

函数

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

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

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

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

注:执行标准数学运算(+,-)或关系运算符(<,>,>,> =)直接在这些值上会导致无效结果。执行数学运算然后传递结果作为论据来ticks_diff()ticks_add() 也将导致后一个函数的无效结果。

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

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

  • 可用性:并非每个端口都实现此功能。

example:

>>> import time
>>> 
>>> time.sleep(1)           # sleep for 1 second
>>> time.sleep_ms(500)      # sleep for 500 milliseconds
>>> time.sleep_us(10)       # sleep for 10 microseconds
>>> start = time.ticks_ms() # get value of millisecond counter
>>> delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference

sys – 系统特有功能函数

sys 模块提供系统相关的功能。

更多内容可参考 sys

函数

  • sys.exit(retval=0) 终止当前程序给定的退出代码。 函数会抛出 SystemExit 异常。

  • sys.print_exception(exc, file=sys.stdout) 打印异常与追踪到一个类似文件的对象 file (或者缺省 sys.stdout ).

常数

  • sys.argv 当前程序启动时参数的可变列表。

  • sys.byteorder 系统字节顺序 (“little” or “big”).

  • sys.implementation 使用当前Python实现的。对于micropython,它具有以下属性:

  • sys.modules 加载模块字典。在一部分环境中它可能不包含内置模块。

  • sys.path 搜索导入模块的可变目录列表。

  • sys.platform 返回当前操作系统信息。

  • sys.stderr 标准错误流。

  • sys.stdin 标准输入流。

  • sys.stdout 标准输出流。

  • sys.version 符合的Python语言版本,如字符串。

  • sys.version_info Python 语言版本,实现符合,作为一个元组的值。

example:

>>> import uos
>>> uos.                        # Tab 
__name__        uname           chdir           getcwd
listdir         mkdir           remove          rmdir
stat            unlink          mount           umount
>>> uos.mkdir("rtthread")
>>> uos.getcwd()
'/'
>>> uos.chdir("rtthread")
>>> uos.getcwd()
'/rtthread'
>>> uos.listdir()
['web_root', 'rtthread', '11']
>>> uos.rmdir("11")
>>> uos.listdir()
['web_root', 'rtthread']
>>> 

math – 数学函数

math 模块提供了对 C 标准定义的数学函数的访问。

注意 : 需要带有硬件FPU,精度是32位,这个模块需要浮点功能支持。

更多内容可参考 math

函数

  • math.acos(x) 返回 x 的反余弦。

  • math.acosh(x) 返回 x 的逆双曲余弦。

  • math.asin(x) 返回 x 的反正弦。

  • math.asinh(x) 返回x 的逆双曲正弦。

  • math.atan(x) 返回 x 的逆切线。

  • math.atan2(y, x) Return the principal value of the inverse tangent of y/x.

  • math.atanh(x) Return the inverse hyperbolic tangent of x.

  • math.ceil(x) Return an integer, being x rounded towards positive infinity.

  • math.copysign(x, y) Return x with the sign of y.

  • math.cos(x) Return the cosine of x.

  • math.cosh(x) Return the hyperbolic cosine of x.

  • math.degrees(x) Return radians x converted to degrees.

  • math.erf(x) Return the error function of x.

  • math.erfc(x) Return the complementary error function of x.

  • math.exp(x) Return the exponential of x.

  • math.expm1(x) Return exp(x) - 1.

  • math.fabs(x) Return the absolute value of x.

  • math.floor(x) Return an integer, being x rounded towards negative infinity.

  • math.fmod(x, y) Return the remainder of x/y.

  • math.frexp(x) Decomposes a floating-point number into its mantissa and exponent. The returned value is the tuple (m, e) such that x == m * 2**e exactly. If x == 0 then the function returns (0.0, 0), otherwise the relation 0.5 <= abs(m) < 1 holds.

  • math.gamma(x) Return the gamma function of x.

  • math.isfinite(x) Return True if x is finite.

  • math.isinf(x) Return True if x is infinite.

  • math.isnan(x) Return True if x is not-a-number

  • math.ldexp(x, exp) Return x * (2**exp).

  • math.lgamma(x) Return the natural logarithm of the gamma function of x.

  • math.log(x) Return the natural logarithm of x.

  • math.log10(x) Return the base-10 logarithm of x.

  • math.log2(x) Return the base-2 logarithm of x.

  • math.modf(x) Return a tuple of two floats, being the fractional and integral parts of x. Both return values have the same sign as x.

  • math.pow(x, y) Returns x to the power of y.

  • math.radians(x) Return degrees x converted to radians.

  • math.sin(x) Return the sine of x.

  • math.sinh(x) Return the hyperbolic sine of x.

  • math.sqrt(x) Return the square root of x.

  • math.tan(x) Return the tangent of x.

  • math.tanh(x) Return the hyperbolic tangent of x.

  • math.trunc(x) 返回一个整数, x 接近于0。

常数

  • math.e 自然对数的底

  • math.pi 圆周率


uio – 输入/输出流

uio 模块包含流类型 (类似文件) 对象和帮助函数, 更多内容可参考 uio

函数

  • uio.open(name, mode='r', **kwargs) 打开一个文件,关联到内建函数open()。所有端口 (用于访问文件系统) 需要支持模式参数,但支持其他参数不同的端口。

  • class uio.FileIO(...) 这个文件类型用二进制方式打开文件,等于使用open(name, “rb”)。 不应直接使用这个实例。

  • class uio.TextIOWrapper(...) 这个类型以文本方式打开文件,等同于使用open(name, “rt”)不应直接使用这个实例。

  • class uio.StringIO([string])

  • class uio.BytesIO([string]) 内存文件对象。StringIO 用于文本模式 I/O (用 “t” 打开文件),BytesIO 用于二进制方式 (用 “b” 方式)。文件对象的初始内容可以用字符串参数指定(stringio用普通字符串,bytesio用byets对象)。所有的文件方法,如 read(), write(), seek(), flush(), close() 都可以用在这些对象上,包括下面方法:

  • getvalue() 获取缓存区内容。


ucollections – 收集和容器类型

ucollections 模块实现了专门的容器数据类型,它提供了 Python 的通用内置容器的替代方案,包括了字典、列表、集合和元组。

更多的内容可参考 ucollections

  • ucollections.namedtuple(name, fields) 这是工厂函数创建一个新的 namedtuple 型与一个特定的字段名称和集合。namedtuple 是元组允许子类要访问它的字段不仅是数字索引,而且还具有属性使用符号字段名访问语法。 字段是字符串序列指定字段名称。为了兼容的实现也可以用空间分隔的字符串命名的字段(但效率较低) 使用示例:

    from ucollections import namedtuple
    
    MyTuple = namedtuple("MyTuple", ("id", "name"))
    t1 = MyTuple(1, "foo")
    t2 = MyTuple(2, "bar")
    print(t1.name)
    assert t2.name == t2[1]
    ucollections.OrderedDict(...)
    
    

dict 类型的子类,记住并保留键的追加顺序。keys/items返回的顺序被加入:

from ucollections import OrderedDict

# To make benefit of ordered keys, OrderedDict should be initialized
# from sequence of (key, value) pairs.
d = OrderedDict([("z", 1), ("a", 2)])
# More items can be added as usual
d["w"] = 5
d["b"] = 3
for k, v in d.items():
    print(k, v)
    

输出:

z 1 a 2 w 5 b 3


ustruct – 打包和解包原始数据类型

ustruct 模块在 Python 值和以 Python 字节对象表示的 C 结构之间执行转换。

更多的内容可参考 struct

支持 size/byte 的前缀: @, <, >, !. 支持的格式代码: b, B, h, H, i, I, l, L, q, Q, s, P, f, d (最后2个需要浮点库支持).

函数

  • ustruct.calcsize(fmt) 返回需要的字节数fmt

  • ustruct.pack(fmt, v1, v2, ...) 按照字符串格式fmt 压缩参数 v1, v2, ... 。 返回值是参数编码后的字节对象。

  • ustruct.pack_into(fmt, buffer, offset, v1, v2, ...) 按照字符串格式fmt 压缩参数 v1, v2, ... 到缓冲区buffer,开始位置是offsetoffset可以是负数,从缓冲区末尾开始计数。

  • ustruct.unpack(fmt, data) 按照字符串格式fmt解压数据data。 返回值是解压后参数的元组。

  • ustruct.unpack_from(fmt, data, offset=0) 从 fmt 的 offset 开始解压数据,如果 offset 是负数就是从缓冲区末尾开始计算。 返回值是解压后参数元组。


array – 数字数据数组

array 模块定义了一个对象类型,它可以简洁地表示基本值的数组:字符、整数、浮点数。 更多内容可参考 array

支持代码格式: b, B, h, H, i, I, l, L, q, Q, f, d (后2个支持浮点数)。

  • class array.array(typecode[, iterable]) 指定类型创建数组元素。用可选项[]做为数组的初始值,可选项[]未指定的,则创建空数组。

  • append(val) 将新元素添加到数组的结尾,并将其扩展。

  • extend(iterable) 使用迭代方式将新元素添加到数组的结尾,并将其扩展。


gc – 控制垃圾回收

gc 模块提供了垃圾收集器的控制接口。 更多内容可参考 gc

函数

  • gc.enable() 启动自动垃圾回收。

  • gc.disable() 禁用自动垃圾回收。 堆内存仍然可以分配,垃圾回收仍然可以手动启动使用 gc.collect().

  • gc.collect() 运行垃圾回收。

  • gc.mem_alloc() 返回分配的堆RAM的字节数。

  • gc.mem_free() 返回可用堆内存的字节数。