术语表¶
- baremetal(裸机)¶
一种没有(完整)操作系统的系统,例如基于 MCU 的系统。在裸机系统上运行时,MicroPython 实际上像一个小型操作系统一样工作,运行用户程序并提供命令解释器(REPL)。
- buffer protocol(缓冲区协议)¶
任何可以自动转换为字节的 Python 对象,例如
bytes、bytearray、memoryview和str对象,它们都实现了“缓冲区协议”。- board(板子)¶
通常指包含 微控制器 及配套元件的印刷电路板(PCB)。MicroPython 固件通常按板子提供,因为固件既包含 MCU 特定的功能,也包含板级功能,例如驱动程序或引脚名称。
- bytecode(字节码)¶
一种紧凑的 Python 程序表示形式,通过编译 Python 源代码生成。这正是 VM 实际执行的内容。字节码通常在运行时自动生成,对用户不可见。请注意,虽然 CPython 和 MicroPython 都使用字节码,但其格式不同。你也可以使用 cross-compiler 离线预编译源代码。
- callee-owned tuple(被调用方拥有的元组)¶
这是 MicroPython 特有的一种构造,出于效率原因,某些内置函数或方法可能会重用同一个底层元组对象来返回数据。这样可以避免每次调用都分配一个新元组,并减少 heap 碎片化。程序不应持有对被调用方拥有的元组的引用,而应只从中提取数据(或制作副本)。
- CircuitPython¶
由 Adafruit Industries 开发的 MicroPython 变体。
- CPython¶
CPython 是 Python 编程语言的参考实现,也是最知名的一个实现。然而,它只是众多实现之一(包括 Jython、IronPython、PyPy 和 MicroPython)。虽然 MicroPython 的实现与 CPython 有很大差异,但它力求保持尽可能多的兼容性。
- cross-compiler(交叉编译器)¶
也称为
mpy-cross。该工具在你的 PC 上运行,将包含 MicroPython 代码的 .py file 转换为包含 MicroPython bytecode 的 .mpy file。这意味着它加载更快(板子无需编译代码),并且在闪存上占用更少空间(字节码更节省空间)。- driver(驱动程序)¶
一个为特定组件(例如传感器或显示器)实现支持的 MicroPython 库。
- FFI¶
外部函数接口(Foreign Function Interface)的缩写。这是 MicroPython Unix port 用来访问操作系统功能的一种机制。它在 baremetal 移植版本上不可用。
- filesystem(文件系统)¶
大多数 MicroPython 移植版本和板子都提供一个存储在闪存中的文件系统,用户代码可通过标准 Python 文件 API(例如
open())来使用它。某些板子还会通过 USB 大容量存储让主机可以访问这个内部文件系统。- frozen module(冻结模块)¶
一种已被 交叉编译 并打包进固件镜像的 Python 模块。由于代码直接从闪存执行,这降低了 RAM 需求。
- Garbage Collector(垃圾回收器)¶
在 Python(和 MicroPython)中运行的一个后台进程,用于回收 heap 中未使用的内存。
- GPIO¶
通用输入/输出(General-purpose input/output)。这是控制微控制器上电信号(通常称为“引脚”)的最简单方式。GPIO 通常允许引脚作为输入或输出,并设置或获取其数字值(逻辑“0”或“1”)。MicroPython 使用
machine.Pin和machine.Signal类来抽象 GPIO 访问。- GPIO port(GPIO 端口)¶
一组 GPIO 引脚,通常基于这些引脚的硬件特性进行分组(例如由同一寄存器控制)。
- heap(堆)¶
RAM 中用于 MicroPython 存储动态数据的一块区域。它由 Garbage Collector 自动管理。不同的 MCU 和板子可用于堆的 RAM 量差异巨大,因此这会影响你的程序能有多复杂。
- interned string(驻留字符串)¶
MicroPython 采用的一种优化,用于提高处理字符串的效率。驻留字符串通过其(唯一的)标识而非地址来引用,因此仅凭其标识符即可快速比较。这也意味着内存中相同的字符串可以去重。字符串驻留对用户几乎总是不可见的。
- MCU¶
微控制器(Microcontroller)。微控制器的资源通常远少于台式机、笔记本电脑或手机,但它们更小、更便宜,且所需功耗也少得多。MicroPython 的设计目标就是足够小巧并经过优化,以便能在一般的现代微控制器上运行。
- micropython-lib¶
MicroPython(通常)作为单个可执行/二进制文件分发,仅带有少数内置模块。它没有可与 CPython 相媲美的庞大标准库。取而代之的是有一个相关但独立的项目 micropython-lib,它为 CPython 标准库中的许多模块提供了实现。
其中一些模块以纯 Python 实现,可在任何移植版本上运行;OpenMV 固件将其中一部分(传感器驱动、网络以及实用辅助工具)直接冻结进固件镜像,因此无需安装任何东西即可导入它们。少数 micropython-lib 模块使用 FFI,仅在 MicroPython Unix port 上有效;这些模块在 OpenMV Cam 上不可用。
与 CPython 标准库不同,未被冻结进固件的 micropython-lib 模块需要单独安装——要么将它们复制到文件系统上,要么在具备网络功能的板子上使用 mip。
- MicroPython port(MicroPython 移植版本)¶
MicroPython 支持不同的 板子、RTOS 和操作系统,并且可以相对容易地适配到新系统上。支持特定系统的 MicroPython 称为针对该系统的“移植版本(port)”。不同移植版本的功能可能差异很大。本文档旨在作为不同移植版本中通用 API(“MicroPython 核心”)的参考。请注意,某些移植版本可能仍会省略这里描述的部分 API(例如由于资源限制)。任何此类差异,以及超出 MicroPython 核心功能的移植专有扩展,都会在各自独立的移植专有文档中说明。
- MicroPython Unix port(MicroPython Unix 移植版本)¶
Unix 移植版本是主要的 MicroPython 移植版本 之一。它旨在运行于 POSIX 兼容的操作系统上,例如 Linux、MacOS、FreeBSD、Solaris 等。它也是 Windows 移植版本的基础。Unix 移植版本对于快速开发和测试 MicroPython 语言及与机器无关的特性非常有用。它还能以类似于 CPython 的
python可执行文件的方式运行。- mip¶
MicroPython 的包安装器(mip —— “mip installs packages”)。它从 micropython-lib、GitHub 或任意 URL 安装 MicroPython 包。mip 可以在具备网络功能的板子上设备端使用,也可被 mpremote 等工具内部使用。
有关使用
mip的更多信息,请参阅 包管理。- mpremote¶
一个用于与 MicroPython 设备交互的工具。请参阅 MicroPython 远程控制:mpremote。
- .mpy file(.mpy 文件)¶
cross-compiler 的输出。这是 .py file 的一种编译形式,其中包含 MicroPython bytecode 而非 Python 源代码。
- native(原生)¶
通常指“原生代码”,即目标微控制器的机器码(基于 Cortex-M 的 OpenMV Cam 上为 ARM Thumb)。可以将
@micropython.native装饰器应用于某个 MicroPython 函数,从而为该函数生成原生代码而非 bytecode,这通常会更快,但会占用更多 RAM。- port(移植版本/端口)¶
通常是 MicroPython port 的简称,但也可能指 GPIO port。
- .py file(.py 文件)¶
一个包含 Python 源代码的文件。
- pyboard.py¶
一个现已被取代的主机端工具,用于与 MicroPython 板子交互——通过原始 REPL 运行脚本和访问文件系统。请参阅它的替代品 mpremote。
- REPL¶
“Read, Eval, Print, Loop”(读取、求值、打印、循环)的缩写。这是交互式 Python 提示符,对于调试或测试简短的代码片段很有用。OpenMV Cam 通过 USB(一个 USB CDC 串行设备)将 REPL 提供给主机 PC。
- small integer(小整数)¶
MicroPython 对整数的内部表示进行了优化,使得“小”值不占用 heap 上的空间,且对它们的计算无需堆分配。在大多数 32 位移植版本上,这对应于区间
-2**30 <= x < 2**30内的值,但这应被视为实现细节,不应依赖它。- stream(流)¶
也称为“类文件对象”。一种对底层数据提供顺序读写访问的 Python 对象。流对象实现了相应的接口,该接口由
read()、write()、readinto()、seek()、flush()、close()等方法组成。流是 MicroPython 中的一个重要概念;许多 I/O 对象都实现了流接口,因此可以在不同上下文中一致地、可互换地使用。有关 MicroPython 中流的更多信息,请参阅io模块。- UART¶
“Universal Asynchronous Receiver/Transmitter”(通用异步收发器)的缩写。这是一种通过一对引脚(TX 和 RX)发送数据的外设。许多板子都提供了一种方式,将至少一个 UART 作为通过 USB 的串口提供给主机 PC。
- upip¶
一个现已废弃的 MicroPython 包管理器,受 CPython 的 pip 启发,但要小得多且功能有所缩减。请参阅它的替代品 mip。
- webrepl¶
一种从浏览器通过互联网连接到设备上的 REPL(并传输文件)的方式。请参阅 https://micropython.org/webrepl