MicroPython v1.21 发布,新的 deflate 压缩模块

MicroPython 的这一版本主要对内置模块进行了重命名,删除了 u 前缀,一个具有可选压缩支持的新 deflate 模块,引入了板变体,将esp32移植切换为使用IDF 5,并改进了堆管理,支持 RPi Pico W 板载的 BLE,以及STM32H5xx 支持。该项目现在也在使用代码拼写和 ruff 来提高代码质量。此版本中添加的新开发板有:

  • ARDUINO_NANO_ESP32 和 UM_NANOS3 (esp32 版)
  • ADAFRUIT_METRO_M7(mimxrt 版)
  • ARDUINO_PORTENTA_C33 和 VK_RA6M5(renesas ra 版)
  • ADAFRUIT_ETRO_M4_EXPRESS(samd 版)
  • NUCLEO_L4A6ZG 和 STM32H573I_DK(stm32 版)。

对内置模块进行重命名,删除u前缀 —— 例如,utime变为time,uasyncio变为asyncio —— 是为了提高与 CPython 的兼容性,并消除关于是导入名称的 u 版本还是非 u 版本的困惑。现在,应该始终导入非 u 版本,不再考虑 u 命名。唯一剩下的带有 u 前缀的模块是 uctypes,因为它与CPython ctypes模块不兼容。以下模块仍然可以通过其 u 名称进行向后兼容性:array、asyncio、binascii、bluetooth、collections、cryptolib、errno、hashlib、heapq、io、json、machine、os、platform、random、re、select、socket、ssl、struct、time、websocket。这些模块(asyncio除外)也是可扩展的,可以被同名文件覆盖,例如time.py。要强制导入内置模块,必须首先清除(然后还原)sys.path;在这个版本中还实现了对 sys.path 属性进行写入的功能。有关更多信息,请参阅 #9018 的讨论。

此外,导入本身也经过了调整和优化,内置导入不再触及文件系统,这使得典型的内置导入耗时约 0.15ms,而不是 3-5ms。对于导入失败的模块,现在将从 sys.modules 中删除这些模块,以便再次尝试导入。这需要添加“NLR跳转回调”,以便在引发异常时有效地运行某些代码。

对核心运行时的其他改进包括支持f字符串中的转换说明符(例如 !r),通过跟踪最后使用的块来加快增量 GC 周期,添加新的 MICROPY_GC_SPLITHEAPAUTO “自动增长堆”模式,以及支持结构格式的填充字节。文档、示例和测试也进行了总体改进和添加。

对于扩展模块,zlib C 模块已被删除,取而代之的是一个新的 MicroPython 特定的 deflate 模块和 DeflateIO 类,该类经过优化,可提供高效的流压缩和解压缩。zlib(和 gzip)模块现在在 deflate 模块之上用纯 Python 实现。timeq 模块已被删除,它只存在于(u)asyncio的早期版本,不再使用。在 ssl 模块中,添加了SSLContext,以便与 CPython 更加兼容。select 模块现在支持在可能的情况下使用 system/POSIX 轮询,unix 移植版现在使用这个实现,而不是它自己的实现。这意味着 unix 版本现在可以对执行 ioctl 的自定义 Python 对象进行选择/轮询。socket 模块现在支持 SO_BROADCAST,unix 上现在存在 sys.std*.buffer对象。还有一个新的 esp 托管网络驱动程序,用于外部基于 ESP32 的网络协处理器。

mpy-cross 现在允许从 stdin 读取源文件,并将编译后的代码写入 stdout。

esp8266 和 esp32 移植版增加了对 Espressif ESP-NOW 协议的支持,以及设置/获取 WLAN 硬件节能模式的能力。esp8266 移植版增加了对板变体的支持,将所有板组合为一个带有 FLASH_512K、FLASH_1M 和 OTA 变体的 ESP8266_GENERIC。

esp32 移植版现在已经完全切换到 ESP-IDF 5,并且所有现有组件都已更新以使用此新IDF(已删除的esp32.hall_sensor()除外)。已为 S2 和 S3 芯片启用 FSM ULP,sockets 现在支持 SO_BINDTODEVICE,并且已实现板级引脚命名和 Pin.board 字典。MicroPython 堆在这个移植版上进行了重新设计,以支持各种各样的内存配置:它现在从 64kbytes 开始,并根据需要自动增长,从IDF堆分配新的段。这意味着,如果只使用少量 RAM,那么带有 SPIRAM 的板具有更快的 GC 收集时间,如果需要,可以使用所有可用的 RAM,并且 IDF 可以访问足够的 RAM 用于 SSL 套接字等。有关更多信息,请参阅 #12141。esp32移植版的通用板也被合并并重命名为 ESP32_GENERIC、ESP32_GENERIC_C3、ESP32_GENERIC_S2 和 ESP32_GENERIC_S3,有些开发板有 SPIRAM 等变体。

mimxrt 移植版对 PWM 和 Pin.irq 进行了修复和改进,并支持 UART 硬件流量控制和 UART.deinit。它还通过 CYW43 驱动程序集成了 WiFi,通过 NimBLE 集成了蓝牙。mbedTLS 绑定已启用证书的时间验证。

renesas-ra 移植版更改了板名以匹配产品名称,更新为使用 FSP v4.4.0,增加了对以下各项的支持:RA6M5 MCU、machine PWM、DAC、RNG 和 SDCard 类、TinyUSB、通过 NimBLE 的蓝牙、通过 lwIP 的网络和mbedTLS。

Pico W 板的 rp2 移植版也增加了蓝牙支持。RPi 板已从 PICO 重命名为 RPi_PICO,并将 PICO_W 重命名为 RPi_PICO_W。Lightsleep 已在该版本上修复,因此它在 WiFi 关闭时可以工作,而 time.time_ns() 现在的分辨率为微秒。

samd 移植版添加了 SPI 和 QSPI 闪存驱动程序,以支持外部闪存上的文件系统。

stm32 移植版增加了对 STM32H5xx MCU 的支持、对 OCTOPI 外围设备的基本支持以及对 STM32L1xx MCU 的 USB 支持。stm 模块增加了新功能,以支持 STM32WL55 上的 sub-GHz 无线电。

在 micropython-lib 中,添加了 SX126x 和 SX127x 芯片组的一个 LoRa 扩展模块,以及 STM32WL55 的驱动程序。此模块同时支持同步和异步(asyncio)模式。此外,作为 u 模块重命名的一部分,urequests 已被重命名为 requests (但为了向后兼容,import urequests目前仍然有效)。

自上一版本以来,各移植版的代码大小的变化是(文本部分的绝对变化和百分比变化):

bare-arm:    +192  +0.340%
minimal x86:    +310  +0.169%
   unix x64:   +4784  +0.610%
      stm32:    -524  -0.134%
     cc3200:    +280  +0.154%
    esp8266:   +8016  +1.151%
      esp32: +112133  +7.293%
     mimxrt:   +3624  +1.015%
 renesas-ra:   -2184  -0.348%
        nrf:    +616  +0.332%
        rp2:   +1920  +0.595%
       samd:   -7904  -2.953%

这些数字的变化主要因为:

  • bare-arm、minimal、cc3200、nrf:NLR跳转回调和对可扩展模块的支持
  • unix:mbedTLS 更新到 v2.28.1,支持在 select 模块中轮询 Python 对象
  • stm32:删除 timeq 模块
  • esp8266:添加 espnow 模块
  • esp32:切换到 ESP-IDF 5
  • mimxrt:UART 功能,SSL证书的时间验证
  • renesas ra:移动到 FSP v4.4.0,删除 timeq 模块
  • rp2:machine.PWM 增强
  • samd:舍弃对 VfsLfs1 的支持

自上一版本以来,性能上没有实际的变化。

请注意,这是最后一个对 nightly/unstable 版本使用当前控制方案的版本,因此版本之间的版本控制为v1.200-g(在v1.20.0版本之后)。接下来,nightly 版本现在将被称为预览版本,并使用下一个版本号进行版本控制。例如,如果上一个版本是v1.21.0,那么预览版本的形式将是v1.22.0-preview.g。有关讨论,请参阅 #12127



坐沙发

发表评论

你的邮件地址不会公开


*