术语表

baremetal(裸机)

一种没有(完整)操作系统的系统,例如基于 MCU 的系统。在裸机系统上运行时,MicroPython 实际上像一个小型操作系统一样工作,运行用户程序并提供命令解释器(REPL)。

buffer protocol(缓冲区协议)

任何可以自动转换为字节的 Python 对象,例如 bytesbytearraymemoryviewstr 对象,它们都实现了“缓冲区协议”。

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.Pinmachine.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 语言及与机器无关的特性非常有用。它还能以类似于 CPythonpython 可执行文件的方式运行。

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