完整的更改日志请查看 micropython-ChangeLog.txt 文件 ( https://micropython.org/resources/micro ... ngeLog.txt )。
v1.18 提升性能, board.json 元文件, 更多 mimxrt、rp2、samd 功能
此版本的 MicroPython 提升了 VM 和运行的整体性能。这是通过添加一个可选的缓存来加速哈希表查找,以及在 VM 中为实例类型上的 LOAD_ATTR 操作码提供快速路径来实现的。新的配置选项是 MICROPY_OPT_MAP_LOOKUP_CACHE 和 MICROPY_OPT_LOAD_ATTR_FAST_PATH。作为此改进的一部分,MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE 选项已被删除,它提供了类似的映射缓存机制,但缓存存储在字节码中,这使得它在裸机端口上没有用处。新机制至少与旧机制一样好,适用于更多映射查找,具有固定的 RAM 开销,并且适用于本机代码和字节码。
这些性能选项在 esp32、mimxrt、rp2、stm32 和 unix 端口上启用。对于 esp32 和 mimxrt 一些代码也被移动到 RAM 以进一步提高性能。在 stm32 上,对于大量使用名称查询的基准,例如 misc_pystone.py 和 misc_raytrace.py,性能提高了约 20%。在 esp32 上性能可以提高 2-3 倍,在 mimxrt 上最高可以提高 6 倍。 所有移植版中的所有硬件现在都有一个 board.json 元数据文件,用于自动构建固件并为此生成一个网页(以及其他可能性)。为此目的添加了自动构建脚本,它们构建所有 esp32、mimxrt、rp2、samd 和 stm32。
对 FROZEN_DIR 和 FROZEN_MPY_DIR 的支持已被弃用一段时间了,最终在此版本中被删除。可以使用 FROZEN_MANIFEST 作为替代。io.resource_stream() 函数也被移除,取而代之的是 micropython-lib 中的纯 Python 版本。
导入冻结 Python 模块的搜索顺序现在由 sys.path 中的 ".frozen" 所控制。该字符串默认添加到 sys.path 的第二个位置。用户代码应根据所需的行为调整 sys.path。在 sys.path 中将 ".frozen" 放在首位将加快导入冻结模块的速度。
在 2c139bbf4e5724ab253b5b034ce925e04267a9c4 提交中修复了 bitwise 为 -0 时多精度整数中的错误。
增加了 platform 模块,允许查询编译器和底层 SDK/HAL/libc 版本。它在 esp32、mimxrt 和 stm32 移植中启用。 mpremote 工具现在支持 PC 安装的文件系统上的 seek、flush、mkdir 和 rmdir。并添加了帮助命令。
得益于 Google Season of Docs 项目(第二次),项目文档得到了许多补充和改进。rp2 文档现在包括 PIO 汇编指令参考、PIO 快速参考和 PIO 教程。random 和 stm 模块已经归档,包括 sys.settrace、manifest.py 文件和 mpremote 等。现在还有更多关于 MicroPython 和标准 Python 3.5 及更高版本之间差异的详细说明。
esp32 移植支持 ESP32-S3 SoC,以及新的 GENERIC_S3、ESP32_S2_WROVER、LOLIN_S2_MINI、LOLIN_S2_PICO 和 UM_FEATHERS2NEO 开发板。改进了 PWM 驱动程序,现在支持所有 PWM 定时器和通道,以及 duty_u16() 和 duty_ns() 方法,并且在改变频率时保持占空比不变。machine.bitstream() 函数已改进为使用 RMT,可以选择原始的 bit-banging 实现。
mimxrt 移植增加了新的硬件功能:SDRAM 和 SD 卡支持,以及 LAN 驱动程序的网络集成。machine.WDT 类与 machine.reset_cause()、machine.soft_reset()、machine.unique_id()、machine.bitstream() 等函数一起添加。还添加了 DHT 传感器支持,并启用了 f 字符串。
rp2 移植现在支持网络和 NimBLE 蓝牙。全新的 Arduino Nano RP2040 连接板完全集成并支持 Nina-W10 WiFi/BT 驱动程序。添加了 I2S 协议支持、 machine.bitstream() 驱动程序和 DHT 传感器支持。PWM 驱动器修复了设置/获取频率准确性的错误,现在更改频率时保持占空比。
在 samd 移植中,现在支持将内部闪存作为块设备,并支持文件系统和 os 模块。引脚和 LED 类已实现。有更多的 time 函数,启用更多的 Python 功能,并添加了 help() 函数。添加了 SEEED_WIO_TERMINAL 和 SEEED_XIAO 板定义。
stm32 现在支持 F427、F479 和 H7A3(Q)/H7B3(Q) MCU,以及 VCC_GND_H743VI、OLIMEX_H407、MIKROE_QUAIL、GARATRONIC_PYBSTICK26_F411、STM32H73B3I_DK 等新开发板定义。修复了 SPI 驱动程序中的一个错误,如果 CYW43 WiFi 驱动程序同时处于活动状态,则 SPI 传输可能会失败。 在 windows 移植上,help() 函数已启用,并添加了对构建变体的支持,以匹配 unix 端口。
zephyr 移植中升级 Zephyr 到 v2.7.0。
自上一版本以来各种移植的代码大小变化是(文本部分中的绝对变化和百分比变化):
bare-arm: -1520 -2.605%
minimal x86: -2256 -1.531%
unix x64: -457 -0.089%
unix nanbox: -925 -0.204%
stm32: +312 +0.079% PYBV10
cc3200: -176 -0.096%
esp8266: +532 +0.076% GENERIC
esp32: +27096 +1.820% GENERIC
nrf: -212 -0.121% pca10040
rp2: +9904 +2.051% PICO
samd: +35332 +33.969% ADAFRUIT_ITSYBITSY_M4_EXPRESS
这些数字的变化是:
- bare-arm, minimal: 使用新的MICROPY_CONFIG_ROM_LEVEL_MINIMUM 选项,以及禁用其余的可选功能。
- unix, cc3200, nrf: 减少了核心的代码大小
- stm32:性能改进,增加了 platform 模块
- esp8266:启用f-strings
- esp32:使用 -O2 取代 -Os
- rp2: machine.I2S和其他新的硬件特性
- samd:支持文件系统和其他新的硬件特性