dcexpert 发表于 2024-10-27 12:10

micropython 发布 v1.24版

**RP2350 和 ESP32-C6 支持,RISC-V 原生发射器,通用 TinyUSB 代码**

在这个版本中 MicroPython 增加了对新的 RP2350 MCU 支持,改进了 RISC-V 本机代码生成的支持,支持 ESP32-C6,更新了支持线程的 Zephyr 版本,跨平台的统一 TinyUSB 绑定,可移植的 UART 中断 API,以及增强的 mpremate 递归复制功能。同时,还包括了大量的错误修复、测试套件的增强以及对 machine 模块及其 API 测试的更多关注。

RISC-V 架构的支持得到了显著扩展,包括 RV32IMC 原生代码生成器、针对 32 位和 64 位 RISC-V 的原生 NLR 和 GC 寄存器扫描实现,支持将 RV32IMC 原生代码放置在 .mpy 文件中并对其进行冻结,以及 RISC-V 半主机支持。RISC-V 的测试使用 qemu 和 unix 进行,该支持在 esp32 和 rp2 中被使用。

现在支持相邻 f 字符串的连接,以及原始 f 字符串。同时,还引入了一个新的 `micropython.RingIO` 类,它提供了一个流接口,用于高效、线程安全的字节环形缓冲区实现。

所有使用 TinyUSB 的硬件现在都已统一使用相同的共享辅助代码进行 CDC 串行通信,包括:esp32(S2 和 S3)、mimxrt、renesas-ra、rp2 和 samd。随之而来的是一项有用的功能,即启动时 CDC 串行数据将被缓冲,并在连接后发送到主机。这意味着(包括其他方面)在首次连接到板子时,现在可以看到 REPL 的初始提示。

大多数硬件现在支持为 UART 中断注册 Python 回调函数,并且回调函数的语义在各个硬件之间尽可能地保持一致。可能的中断类型包括 IRQ_RX、IRQ_RXIDLE、IRQ_TXIDLE 和 IRQ_BREAK,已经添加对这些中断支持硬件的包括 esp32、mimxrt、nrf、renesas-ra、rp2 和 samd(stm32 已经具备此功能)。

在网络子系统方面,新增了一个用于配置 IP 地址和相关设置的 API:全局的 `network.ipconfig()` 函数,以及针对单个网络接口的 `nic.ipconfig()` 方法。这个新的 API 支持 IPv4 和 IPv6,相比原始的 `nic.ifconfig()` 方法具有更多的控制功能;后者仍然可用于向后兼容,但现在更推荐 `ipconfig()`。

基于 lwIP 移植的 `network.PPP` 实现已添加,默认情况下未启用,但可添加到使用裸机 lwIP 的自定义板卡上。

`machine.SoftSPI` 类现在支持最低有效位(LSB)模式,和已有的最高有效位(MSB)模式类似。

`sys.exit()` 和 `raise SystemExit` (它们是等效的)的行为已更改:之前它会导致正在运行的脚本终止并进入交互式解释器,但现在它将终止正在运行的脚本并触发设备的软复位。这一行为变化与 Unix 移植更为一致,在遇到 `SystemExit` 异常时会完全退出。这一行为变化是一个破坏性变更,可能会影响某些应用程序;有关详细信息,请参阅提交记录 (https://github.com/micropython/micropython/commit/69c25ea8653566ec97690b5121bd10b753c89426) 。

mpremote 新增了哈希功能,例如 `mpremote sha256sum <file>` ,并且增强了递归复制功能,该功能首先检查哈希值,只有当哈希值不同时才更新目标文件。这使得将大型目录复制到设备上变得显著更快,并允许实现“同步”工作流程,即可以对大型应用程序进行小幅度修改,然后通过递归复制快速部署到设备上。

ESP32 现在支持 ESP-IDF v5.2.2,同时支持 ESP32-C6 微控制器。在 C3 和 C6 微控制器上已启用 RISC-V 原生发射器。此外,还修复了一些重要错误,包括从 .mpy 文件加载原生代码的处理、栈损坏修复以及 I2S 修复等。另外,对于连续快速使用大量 TCP 套接字的应用程序,现在对活动 TCP 套接字数量有了硬限制,因此应该会看到性能提升。

qemu 移植已从 qemu-arm 更名为 qemu,现在支持 ARM 和 RISC-V 架构。它经过重新设计,提供 REPL 功能,并通过 pty 串行端口运行测试,模拟在裸机上运行。

rp2 已更新到 pico-sdk v2.0.0 版本,该版本为 MicroPython 提供了对新的 RP2350 MCU 支持,包括 ARM 和 RISC-V 模式,以及 30 引脚和 48 引脚两种硬件版本。默认启用 IPv6,并提供了可选的 `network.PPP` 。现在 USB 将在 `machine.lightsleep()` 期间保持激活状态,同时进行了许多错误修复。

stm32 也通过 lwIP 支持可选的 `network.PPP` 功能,并在 STM32H7 微控制器上支持 octospi。新增了一个构建选项,可以将中断请求(IRQ)、闪存和 UART 代码放入 RAM 中,此功能在具有 UART REPL 的板上启用,以便在这些板上工作时不丢失 UART 字符(例如,使用 mpremote 将文件复制到板上)。通过 PendSV 的抢占式键盘中断已被移除:这存在 bug 并且不再必要;有关详细信息,请参阅 (https://github.com/micropython/micropython/commit/ece950d9bed18554e945188c5a31908c8bfa9a7b) 。ARDUINO_PORTENTA_H7 和 ARDUINO_NICLA_VISION 开发板增加了对 NXP SE05x 安全元素的兼容性,并集成在 mbedTLS 中。

webassembly 对 asyncio 的支持更好,包括能够对 Task 和 Event 对象进行顶级 await。同时,JavaScript 和 Python 之间对象的代理功能也得到了增强。

zephyr 已升级至 Zephyr v3.7.0,通过 *_thread* 模块实现了线程功能,REPL 现已进入非阻塞模式,以便处理事件/回调,还启用了更多 Python 功能,包括大整数,并且可以使用设备树节点标签来构建机器对象(例如 Pin、I2C)。

新版本中添加的开发板有:ESP32_GENERIC_C6、M5STACK_ATOMS3_LITE、M5STACK_NANOC6、OLIMEX_ESP32_EVB、UM_FEATHERS3NEO、UM_OMGS3、UM_RGBTOUCH_MINI 和 UM_TINYC6(esp32 版)、RPI_PICO2(rp2 版)、ARDUINO_OPTA(stm32 版)。

自上次发布以来,针对各个硬件,代码大小的变化如下(文本部分的绝对变化量和百分比变化量):

```
   bare-arm:   +116+0.203%
minimal x86:   +185+0.100%
   unix x64:+8994+1.098%
      stm32:+1028+0.263%
   cc3200:+1152+0.625%
    esp8266:+2968+0.426%
      esp32: -53617-3.101%
   mimxrt:+1864+0.513%
renesas-ra:+1536+0.245%
      nrf:+1460+0.781%
      rp2:+3592+1.068%
       samd:+2244+0.845%
```

导致代码大小变化的主要因素有:

* bare-arm、minimal:修复 `int.to_bytes()` 缓冲区大小检查
* unix:在 mbedTLS 配置中启用 GCM 和 ECDHE-RSA
* stm32:添加新类 `RingIO`
* cc3200:添加 `network.ipconfig` 和 `WLAN.ipconfig`
* ESP8266:添加 `network.ipconfig` 、 `WLAN.ipconfig` 和 `RingIO` 类
* ESP32:将 ESP-IDF 从 v5.0.5 更新到 v5.2.2
* mimxrt, renesas-ra, nrf, rp2, samd:支持 `RingIO` 类和 `UART.irq`


与上一个版本相比,所有硬件在性能上均无显著变化,除了 unix 版本因为不再扫描可执行内存中的根指针,垃圾回收时间有所减少。

感谢以下所有为这次发布做出贡献的人:Adrian Higgins、Alessandro Gatti、Alexandre Iooss、Amirreza Hamzavi、Andrea Milazzo、Andrew Leech、Angus Gratton、Ayush Singh、cajt、Christian Walther、Corran Webster、Damien George、Dan Halbert、danicampora、David Lechner、dmfaria、Dryw Wade、Elvis Pfützenreuter、Felix Dörre、George Hopkins、Glenn Moloney、iabdalkader、IhorNehrutsa、Jared Hancock、Jason Kridner、Jim Mussared、Jon Foster、Jos Verlinde、Junwha、Laurens Valk、Lennart、Leo Chung、Matt Trentini、Matthias Blankertz、Maureen Helm、Michael Sawyer、Michael Vornovitsky、nspsck、Owen、Paul Grayson、Peter Harper、Peter Züger、Phil Howard、Plaque FCC、Rick Sorensen、robert-hh、Seon Rozenblum、shiggy、stijn、Sylvain Zimmer、Takeo Takahashi、Terence Stenvold、tharuka、Tim Weber、timdechant、Volodymyr Shymanskyy、Yoctopuce、ZodiusInfuser。

MicroPython 是一个全球开源项目,贡献来自以下时区:-0700,-0600,-0500,-0400,-0300,+0000,+0100,+0200,+0300,+0330,+0530,+0800,+0900,+1000,+1100。

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

秦天qintian0303 发表于 2024-10-27 12:25

<p>看样子RP2350 和 ESP32-C6这两年会是主流&nbsp; &nbsp;</p>

hellokitty_bean 发表于 2024-10-27 22:11

<p>关注关注。。。。。。。。。。。。。。。。。。。。。。点赞点赞<img height="63" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/victory.gif" width="61" /></p>
页: [1]
查看完整版本: micropython 发布 v1.24版