MICROPYTHON 发布 1.22 版

MicroPython、microbit、makecode等
最新动态
回复
头像
shaoziyang
帖子: 3972
注册时间: 2019年 10月 21日 13:48

MICROPYTHON 发布 1.22 版

#1

帖子 shaoziyang »

https://github.com/micropython/micropyt ... ag/v1.22.0
SSL support in asyncio, sorted qstr pools, common machine module bindings

This release of MicroPython introduces SSL/TLS support to asyncio, for both the client and server sides. The interface matches CPython: asyncio.open_connection() and asyncio.start_serve() now both accept an ssl argument to supply an SSLContext object. As part of this, new methods were added to SSLContext to load certificates, and certificate date/time validation was enabled on all ports that use mbedTLS.

Qstr pools are now sorted, which provides a significant performance boost for qstr_find_strn(), which is called a lot during parsing and loading of .mpy files, as well as interning of string objects, which happens in most string methods that return new strings. The static pool (part of the .mpy ABI) isn't currently sorted, but could be in the future.

There have been many internal changes to the machine module (and on some ports the os module) to factor the Python bindings to a common location, reduce code duplication and make the API more consistent across all the ports. And a new boardgen.py script has been added to factor pin generation and enable a more consistent machine.Pin across ports. For consistency, the following user-facing changes have been made:

...

头像
shaoziyang
帖子: 3972
注册时间: 2019年 10月 21日 13:48

Re: MICROPYTHON 发布 1.22 版

#2

帖子 shaoziyang »

异步、排序的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。

https://github.com/micropython/micropython/releases
 

回复

  • 随机主题
    回复总数
    阅读次数
    最新文章