[分享] MICROPYTHON 发布 1.22 版 异步、排序的qstr池、通用机器模块绑定中的SSL支持

dcexpert   2023-12-28 23:21 楼主

此版本的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。

 

https://github.com/micropython/micropython/releases/tag/v1.22.0

回复评论 (6)

esp8266居然还在支持,乐鑫几乎都不卖了

点赞  2023-12-29 08:52

话说这次看更新也不少,为什么这次发布的这么快啊

 

点赞  2023-12-29 11:10
引用: 极限零 发表于 2023-12-29 08:52 esp8266居然还在支持,乐鑫几乎都不卖了

那是别家卖的太便宜了。

点赞  2023-12-29 12:35
引用: 极限零 发表于 2023-12-29 11:10 话说这次看更新也不少,为什么这次发布的这么快啊  

也差不多两个月了,按照官方最初设想,时每两个月发布一个小版本升级的。

点赞  2023-12-29 12:37

此版本的MicroPython为客户端和服务器端引入了asyncio对SSL/TLS支持。接口与CPython匹配。

最近感觉好象cpy的厂家接入在增长呢。

点赞  2024-1-2 09:33
引用: lugl4313820 发表于 2024-1-2 09:33 此版本的MicroPython为客户端和服务器端引入了asyncio对SSL/TLS支持。接口与CPython匹配。 最近感觉好象 ...

通用性好

点赞  2024-1-2 11:38
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复