MICROPYTHON 发布 1.22 版 异步、排序的qstr池、通用机器模块绑定中的SSL支持
[复制链接]
此版本的MicroPython为客户端和服务器端引入了asyncio对SSL/TLS支持。接口与CPython匹配:asyncio.open_connection()和asyncio.start_server()现在都接受ssl参数来提供SSLContext对象。作为其中的一部分,向SSLContext中添加了新方法来加载证书,并在所有使用mbedTLS的端口上启用了证书日期/时间验证。
现在对Qstr池进行了排序,这为Qstr_find_strn() 提供了显著的性能提升,在解析和加载.mpy文件以及字符串对象的内部处理过程中经常调用Qstr_find_strn(),这发生在大多数返回新字符串的方法中。静态池(.mpy ABI的一部分)当前未进行排序,但将来可能会进行排序。
对machine模块(以及一些移植版的os模块)进行了许多内部更改,以将Python绑定到一个公共位置,减少代码重复,并使API在所有端口之间更加一致。此外,还添加了一个新的boardgen.py脚本,以促进 machine.Pin 生成和跨平台一致性。为了保持一致性,已经进行了如下的更改:
- cc3200:machine 模块增加 soft_reset()、mem8、mem16、mem32和Signal;废弃 POWER_ ON(由PWRON_RESET代替)。disable_irq() 现在返回一个(不透明的)整数而不是布尔,并且必须向enable_irq的(state)传递一个参数,该参数是disable_irq() 的返回值,而不是布尔。在 os 模块中,dupter() 已转换为使用通用实现,其语义与其他移植版相同,并删除了uname()以节省空间(可以使用sys.version和sys.implementation)。
- esp32:在machine模块中,lightsleep() 和 deepsleep() 不再接受sleep关键字参数,而是和其它版本相匹配。此外,在这里传递0将进行0ms睡眠,而不是表现得什么都没有传递。并且reset_cause()不再接受任何参数(在此之前它将忽略它们)。
- esp8266:machine.idle() 现在返回None,而不是消耗的时间。machine.WDT() 构造函数现在接受关键字参数 timeout,如果它不是默认值,则会引发异常(不支持更改timeout)。
- mimxrt:machine.freq() 现在接受参数,但会引发 NotImplementedError 异常;添加了machine.lightsleep(),但会引 NotImplementedError (这是为了使这些函数与使用其他移植版一致)。
- nrf:macine 模块添加 unique_id()(返回一个空的bytes对象)、freq()(引发NotImplementedError)和Signal。UART.sendbreak() 已删除,此方法以前没有执行任何操作。os.dupterm() 函数已更改,以匹配其他移植版本(除了它被限制为仅接受machine.UART对象)。
- qemu arm:machine 模块添加 soft_reset() 和 idle() 。
- samd:machine.deepsleep() 函数现在在睡眠后复位。
- unix:添加 machine.soft_reset() 。
- zephyr:machine 模块添加 soft_reset()、mem8、mem16 和 mem32。UART 类添加下面方法: init() 支持 timeout 和 timeout_char,deinit() 不做任何操作,flush() 将引发 OSError(EINVAL) 因为尚未实现,any() 和 txdone() 同样也会引发 NotImplementedError。
此版本中删除了 teensy 移植。因为它基本上没有人维护,功能也有限(唯一的硬件支持是GPIO和定时器,没有machine模块),只支持很少数的 Teensy 开发板。
引入了一个新的预览版本控制方案,其中非发布版本是下一个即将发布的版本的预览。该方案有助于消除文档和固件版本号匹配等方面的混乱。
Black已被ruff格式取代,成为 Python 代码格式化程序。这需要对 Python 代码进行一些小的更改,现在允许使用 ruff 进行 linting 和格式化。
绑定方法实例现在支持比较和哈希,匹配CPython语义。由于原生 .mpy ABI的变化,.mpy 子版本已从 6.1 更新到 6.2。添加了一个新选项MICROPY_PREVIEW_VERSION_2,它提供了一种通过运行 make MICROPY-PREVIEW-VERSION_2=1 来启用为 MicroPython 2.x 指定的功能和更改的方法。这是2.x开发分支的替代方案,并且任何功能或更改都将“隐藏”直到2.x使用此标志。
LittleFS 已更新到v2.8.1版本。相关的MicroPython VfsLfs2 驱动程序可以读取现有的 LFS2 文件系统,但任何写入操作都会将文件系统更新到较新的LFS2版本,而旧的驱动程序无法读取该版本,因此在更新时要考虑这一点,例如先更新mboot。
VFS 子系统有一个新的文件 ioctl 来设置读取缓冲区大小,mpremote 使用它来显著提高 “mpremote-mount” 功能的性能。 Manifest 文件现在允许通过add_library(name, path) 注册外部库路径。sys.stdout.buffer.write() 现在返回实际写入的字节数(尽管当输出到多个目标时,这会很复杂)。
esp32 移植已更新为使用 IDF 版本 5.0.4,并调整了初始 GC 堆大小,以便在将堆大小增加一倍后,仍然可以启动 WiFi 并建立 SSL 连接。RMT.source_freq() 现在是一个类方法,套接字连接超时已经实现,RTC 用户内存在大多数复位后保留,并启用了hashlib.md5。
mimxrt 移植添加了 RTC alarm/wakeup 功能,并支持 machine.deepsleep()。
rp2 引入了一个新的 rp2.DMA 类,用于控制 DMA 传输。它已切换为使用与其他硬件相同的数学库,以获得更准确的浮点数。启用 os.dupterm_notify() 以供 WebREPL 使用。TinyUSB 堆栈现在计划从 IRQ 处理程序运行(而不是在 VM 中轮询),这略微提高了 VM 和 USB 的性能。更好地利用了事件调度和WFE,以提高效率。增加了对外部 ADC 通道的支持(例如,当使用ninaw10驱动程序时)。
stm32 改进了对 STM32H5xx MCU的支持,包括以太网支持、HSI频率扩展、睡眠模式和SD卡支持等。NUCLEO_WL55 开发板现在冻结了 LoRa 驱动程序,I2S驱动程序提高了时钟频率的准确性,mboot 现在支持 Microsoft WCID 来设置 USB 驱动程序。
此版本中添加的新开发有:UM_TINYWATCHS3(esp32)、POLOLU_3PI_2040_ROBOT、POLOLO_ZUMO_240_ROBOT和SIL_RP2040_SIM(rp2)、NUCLEO_H563ZI(stm32)。
自上一版本以来,各种硬件的代码大小的变化是(文本部分的绝对变化和百分比变化):
bare-arm: +216 +0.381%
minimal x86: +624 +0.340%
unix x64: +8283 +1.050%
stm32: +1368 +0.350%
cc3200: +1184 +0.649%
esp8266: +800 +0.114%
esp32: +35348 +2.100%
mimxrt: +2172 +0.602%
renesas-ra: +96 +0.015%
nrf: +1460 +0.785%
rp2: +6100 +1.880%
samd: +1476 +0.568%
这些数字的变化主要来自:
-
bare-arm,minimal:比较和哈希绑定方法,排序的qstr池
-
unix:将LittleFS更新到2.8.1,启用证书日期/时间验证,添加SSLContext证书方法,异步SSL支持
-
stm32:qstrs排序,将LittleFS更新到2.8.1,I2S时钟频率改进,异步SSL支持
-
cc3200:qstrs排序,更多的machine模块功能,实现通用os.dupterm
-
esp32:将ESP-IDF从5.0.2切换到5.0.4
-
esp8266:将LittleFS更新为2.8.1
-
mimxrt:添加RTC alarm/wakeup 功能,将LittleFS更新到2.8.1,支持异步SSL
-
nrf:将LittleFS更新到2.8.1,启用machine.Signal、异步SSL支持
-
rp2:使用本地提供的数学库,添加新的rp2.DMA类
-
samd:qstrs排序,更新LittleFS到2.8.1,异步SSL支持
新的排序qstr池,大量qstr操作的性能显著提高,提高幅度在+50%到+200%之间。其他领域的性能自上次发布以来没有变化。
感谢所有为本次发布做出贡献的人:Alessandro Gatti、Andrew Leech、Angus Gratton、Carlosgg、Christian Walter、Damien George、Daniël van de Giessen、Elias Wimmer、Glenn Moloney、iabdalkader、Ihor Nehrutsa、Jeff Epler、Jim Mussared、Kwabena W.Agyeman、Maarten van der Schrick、Mark Blakeney、Mathieu Serandour、Matthias Urlichs、MikeTeachman、Ned Konz、Nicko van Someren,Pascal Brunot、Patrick Van Oosterwijck、Paul Grayson、Peter Züger、Rene Straub、robert-hh、Scott赵、Sebastian Romero、Seon Rozenblum、stijn、Thomas Ackermann、Thomas Wenrich、ThomHPL、Trent Piefho。
捐款来自以下时区:0800、0700、0600、0500、+0000、+0100、+0200、+1000、+1100。
|