动态USB设备,改进的webassembly移植,openamp,tls,vfs模块
此版本的MicroPython增加了对Python中定义的动态USB设备的支持,添加了新的openamp、tls和vfs模块,完全重新配置了webassembly以添加JavaScript和Python之间的代理,并为冻结模块实现了显著的代码大小优化。还有许多其他增强功能和错误修复。
经过大量的设计、开发和测试,MicroPython现在完全支持用户定义的USB设备。接口是通过新的 machine.USBDevice 类实现的,这允许用户指定USB描述符并实现USB端点传输的Python回调。有了它,任何USB设备都可以用纯Python实现。而 machine.USBDevice 接口是低层和完整的,在microython库中有一个更高级的USB库,可以更容易地实现各种设备,例如键盘、鼠标、MIDI 和串行 CDC。该功能目前在rp2和 samd 上可用,将来会移植到其它硬件。
通过新的OpenAMP模块增加了对OpenAMP(非对称多处理)协议的支持。这允许MicroPython控制系统中的其他CPU核心,加载和启动进程,并通过终端与它们通信。此功能目前在 mimxrt 和 stm32 上可用。
添加了两个新的模块:vfs 和 tls。vfs模块包含所有与vfs(虚拟文件系统)相关的函数和类,如mount、umount和VfsFat。这些最初在os模块中,但在os中使用它们与CPython不兼容,因此它们被移到了自己的专用模块中。它们目前仍存在于 os 模块中,但最终会从中删除,因此建议从现在开始使用vfs模块。同样,新的tls模块是ssl模块的演变,因此ssl中的所有现有功能都已转移到tls模块。之所以这样做,是因为MicroPython的SSL接口与CPython的越来越不同,将 SSL/TLS功能转移到新的TLS模块中,为其提供了发展空间,并获得对嵌入式应用程序有用的新功能。通过ssl模块的纯Python实现,仍然保留了与普通Python的兼容性。新的tls模块中的一个新特性是能够注册证书验证回调。
其他添加包括deque对象上的更多方法,使其具有双端性并支持迭代,以及支持 struct.pack/struct.unpack 中的半浮点 'e' 格式。动态本机模块已经公开了一些额外的运行时方法,.mpy 子版本已经从 v6.2 增加到 v6.3(.mpy文件中的本机代码需要重新编译,但字节码没有,而且仍然兼容)。
对于冻结模块,进行了显著的代码大小优化。已经定义了一种新的内部 mp_proto_fun_t 类型,它允许字节码函数(与本机代码相反)存储在冻结代码中,而不需要 mp_raw_code_t 描述符结构的任何额外开销。所有使用冻结模块构建的固件的大小都将显著减小。通过添加删除qstr散列字节的选项,对于非常小的目标,代码大小也得到了进一步的改进。
在源代码内部,“STATIC” 宏定义已被删除。代码现在应该只使用“static”。如果您有使用“STATIC”的C/C++代码,那么将其替换为“STATIC”,或者提供您自己的#define将“STATIC”定义为“STATIC”。有关详细信息,请参阅 。
Mbedtls 已更新到3.5.1版本。网络接口常量,如IF_STA和SEC_WPA2,现在已经跨端口合并,因此它们都位于 WLAN 类级别,例如 network.WLAN。SEC_WPA2(为了向后兼容,保留了网络模块级别的现有常量,但从现在起应优先使用新常量)。
esp32 在BLE组件中发现了一些重要的错误修复,以在不崩溃的情况下进行去初始化,并增加BLE任务堆栈的大小。该端口还使用新的 I2S IDF 驱动程序,并支持 IDF 5.0.5和5.2。对于esp32-C3/S2/S3设备,支持通过machine.bootloader() 进入引导加载程序,以及 esp32.mcu_temperature()。
rp2 端口已添加新的 machine.USBDevice 动态USB驱动程序,并将固件性能优化应用于运行时和虚拟机的关键部分,使性能提高了约10%。现在可以通过代理阵列直接访问 PIO 和 SPI FIFO 的内存,线程、lightsleep和UART IRQ延迟的错误已经修复。
stm32端口集成了对新openamp模块的支持,该模块在所有 Arduino 板上都启用。Arduino板的固件现在冻结在额外的Arduino特定库代码中。已经修复了STM32H5和STM32H7 MCU上的内部闪存写入(组选择和写入缓冲区中最后一个字),对 SPI DMA 缓存错误的重要修复,STM32F7 MCU上 I2C4 的 I2C 时钟修复,以及STM32G4 MCU上 FDCAN 源时钟频率的修复。Mboot 增加了对新的原始文件系统的支持,以允许更简单、更健壮的固件更新。
webassembly 端口在结构上进行了重大修改,现在构建为JavaScript.mjs模块,导出用户友好的JavaScriptlevel API,其灵感来自Pyodide提供的API(这是在浏览器中运行的CPython版本)。这一变化的动机是需要在Pyscript中使用MicroPython作为引擎,Pyscript是浏览器中Python的平台。webassembly端口中的新功能包括Python和JavaScript之间的对象代理、与JavaScript命名空间接口的js模块、用于各种代理助手的jsffi模块、顶级异步代码、JavaScript驱动的异步支持、Python堆的自动增长、用于全局内存管理的JavaScript和Python最终确定的集成、更多的时间模块函数以及对构建变体的支持(遵循unix端口)。
自上一版本以来,各种端口的代码大小的变化是(文本部分的绝对变化和百分比变化):
bare-arm: -220 -0.383%
minimal x86: -341 -0.184%
unix x64: +20168 +2.527%
stm32: -1692 -0.430%
cc3200: +256 +0.139%
esp8266: -8880 -1.260%
esp32: -3328 -0.194%
mimxrt: -408 -0.112%
renesas-ra: -464 -0.074%
nrf: -640 -0.341%
rp2: +5380 +1.626%
samd: +3224 +1.229%
这些代码大小变化的主要原因是:
- bare-arm、minimal :禁用qstr哈希
- unix:将mbedtls更新到3.5.1版本
- stm32:优化冻结模块的大小
- cc3200:添加了新的vfs模块,并修复了VM和数组类型中的错误
- esp8266:禁用未使用的MICROPY_DEBUG_PRINTERS并优化冻结的模块
- esp32、mimxrt、renesasra、nrf:优化冻结模块
- rp2:添加machine.USBDevice,启用-O2优化
- samd:添加machine.USBDevice
自上一版本以来,所有端口的性能实际上都没有变化,除了rp2端口,它的性能提高了大约10%。
感谢所有为本次发布做出贡献的人:Amirreza Hamzavi、Andrew Leech、Angus Gratton、Brian Pugh、Carlosgg、Christian Walther、Damien George、Daniël van de Giessen、darc、Dash Peters、David Lechner、Felix Dörre、iabdalkader、IhorNehrutsa、Iksas、J.Neuschäfer、Jared Hancock、Jim Lipsey、Jim Mussared、Jochen Sprickerhof、Joey232、Jos Verlinde、Kwabena W.Agyeman、Maarten van der Schreck、Matt Trentini、Matthias Urlichs、Michia iel W.Beijen、MikeTeachman、Nicko van Someren、Olivier Lenoir、Phil Howard、Rick Sorensen、robert hh、Sebastian Romero、Simon Wood、Stanislav Ponomarev、stijn、Takahashi Takeo、Trent Piepho、Trent Warlaven、Vonasmic、YAMAMOTO Takashi、Yoctopuce。
MicroPython是一个全球开源项目,其贡献来自以下时区:0800、0700、0600、-0500、-0300、+0000、+0100、+0200、+0330、+0400、+0900、+1000、+1100。
本次发布的工作部分由GitHub赞助商资助,部分由George Robotics、Espressif、Anaconda、Arduino、LEGO Education、OpenMV和Planet Innovation资助。
|