259|2

1万

帖子

14

资源

版主

MicroPython 1.19 版本发布 [复制链接]

经过漫长的等待,MicroPython 的 v1.19 已经发布,下面是这次更新的说明。

 

v1.19:新的 mpy 6 文件格式,改进了字节码,添加了 Renesas-ra 硬件平台

 

在这个版本的 MicroPython 中,对 .mpy 文件格式进行了重大修改并升级到版本 6。新格式现在包含数据和字节码,这些数据和字节码在大多数情况下组织成静态,可以直接运行。为了实现这一点,来自字节码(和本机机器代码)的 qstr 引用现在通过查表,将模块中的本地 qstr 编号转换为模块在其中执行的运行时中的全局 qstr 编号。这意味着字节码(和大多数本机代码)在导入时不需要重写。随着这一变化,跳转操作码已被优化为在可能的情况下发出 1 字节跳转偏移量,这可以很好地减少字节码大小,节省 RAM 并减小 .mpy 文件的大小。

对字节码的更改意味着代码常量(如长字符串、字节对象和浮点数)在整个模块中共享和删除重复数据,而不是每个代码对象都有一个单独的常量表。解析器现在还可以将常量元组转换为常量对象,因此不需要在每次使用时都在运行时构建元组。此外,可以在“X = const(obj)”语句中使用任何常量对象。

通过针对字节码的更改,mpy 文件的大小减少了约 10%,冻结的 .mpy 代码的大小减少了约 5%。导入后的堆内存使用量也下降了大约 5%(如果代码使用大量常量,可以看到更多的节省)。尽管 VM 的 qstr 间接性能在某些基准测试中略微降低了几个百分点,但更小的代码和减少 RAM 使用的好处被认为超过了这一点。请参阅 f2040bf 。

在运行时,在 PEP 448 之后,在函数调用中添加了对多个 *args 和 **args 的支持。内置模块现在可以具有(可选)可变属性,这用于实现 sys.ps1/sys。ps2 允许用户自定义 REPL 提示。某些时候这可能很有用,例如为不同的硬件配置不同的 REPL,以便轻松区分它们。sys 模块还具有附加到 sys.version 的 MicroPython git 版本和构建日期,添加了 sys.implementation._machine,并将 sys.implementation.mpy 重命名为 sys.implementation._mpy。sys 模块现在可用于完全识别 MicroPython 版本和运行它的目标(平台模块在可用时提供额外信息)。MP_REGISTER_MODULE 宏现在用于注册所有内置 C 模块,并且该宏的第三个参数已被删除。任何用户 C 模块都需要更新。还删除了对 MICROPY_PORT_BUILTIN_MODULES 的支持,因为不再使用它,并且应该使用 MP_REGISTER_MODULE 替换(例如,参见提交 0a92469 )。

mpy-cross 现在支持 -march=armv6m 选项,可以与 rp2 一起使用。-mno-unicode 已被删除。

littlefs2 库已更新至 v2.5.0,其中包括一些性能改进和小修复。
在 REPL 中,Tab 键现在会在空格后面插入缩进,如果空格或 tab 跟在自动缩进后面,自动缩进会自动禁用。这意味着可以将 Python 代码粘贴到标准 REPL 中而不会弄乱缩进。

mpremote 升级到 0.3.0 版,复制大文件时显示进度,并在 Windows 上修复了递归复制。它还添加了以下命令:--help、--version、version、resume、soft-reset、umount。

esp32 平台有一个新的 machine.ADCBlock 类和更新的 ADC 类。已对 ADC2 通道映射、低 PWM 频率、未指定参数的 UART 初始化以及 S2/S3/C3 变体上的 RMT 通道进行了修复。Pin.PULL_HOLD 常量已被 Pic 构造函数的“hold”关键字参数替换,现在可以配置引脚驱动能力。I2C 先写后读传输已经过优化,速度更快。WLAN.config() 现在支持设置/获取 txpower。支持新开发板包括 LOLIN C3 MINI ESP32-C3、LilyGO LoRa32 和 UM ESP32-S3 等。

mimxrt 硬件平台已将 nxp_driver 更新到 v2.10,并修复 USB CDC RX 处理为不阻塞。引脚驱动常量已重命名为 DRIVE_x 以匹配其他硬件,并添加了 machine.I2S 类。新开发板包括 Olimex RT1010 和 MIMXRT1015_EVK。

nrf 硬件环境现在默认包含 uasyncio,并且已在 nrf52840 和 nrf9160 板上启用其他功能以匹配 stm32、rp2 和 esp32 上的功能。这包括启用 json、re、zlib 和 framebuf 模块。

有一个新的针对 Renesas RA4M1、RA4W1、RA6M1 和 RA6M2 MCU 的新 Renesas-ra 硬件平台,以及用于这些 MCU 的评估套件的板定义,以及 RA4M1 Clicker。该移植目前支持 machine 模块中的 Pin、ADC、SoftI2C、I2C、SoftSPI、SPI、UART、定时器和 RTC 类,以及 VFS 和内部闪存文件系统。

rp2 y移植现在具有可选的 USB MSC 支持和 dupterm 支持。machine.UART 类添加了 init 和 deinit 方法,并且现在可以使用 ucryptolib 模块。lwIP 网络堆栈已与 ssl 模块的 mbedtls 一起集成,这些可与新的 Wiznet 驱动程序一起使用提供以太网支持。添加了使用此驱动程序的 Wiznet W5100S-EVB-Pico 开发板。time.localtime() 返回的星期值已修复,在 core1 上创建线程时的内存损坏已修复,并且 UART 在读/写时使用互斥锁以防止在使用两个核心时代码中出现重复字符。stm32 平台增加了对 G0、G4 和 WL MCU 的支持。这些 MCU 对应的新开发板是 NUCLEO_G0B1RE、NUCLEO_G474RE 和 NUCLEO_WL55。还添加了 ARDUINO_PORTENTA_H7 板,具有完整的 WiFi 和 BLE 支持。WB55 MCU 上的 rfcore 得到了改进,去掉了额外的缓冲层,并且取消了对使用地址解析的限制,这意味着需要将 rfcore WS 固件更新到 v1.12.0 或更高版本;请参阅 26b1d31。mboot 的板级配置得到了显着改进,允许对系统时钟进行更多控制,更多挂钩到启动过程,以及挂钩到状态更改。以及在写入之前验证了 DFU 文件的 CRC32。

pyb.CAN 类已得到改进,以支持具有混合传统/扩展 ID 节点的 FD 帧和总线,允许在每个消息的基础上指定扩展 ID。CAN.recv 现在还返回一个值,指示接收到的消息是否具有扩展 ID。并且 CAN.initfilterbanks 已被删除,取而代之的是 CAN.init 的 num_filter_banks 关键字参数。这些都是对 pyb.CAN 类 API 的重大更改,需要相应地更新代码;请参阅提交 5cdf964 。

unix 移植已在 REPL 中显示编译器信息,以使其与裸机移植的工作方式保持一致,并且为 macOS 添加了“-X 实时”命令行选项以改进时序。切换到使用 VFS 子系统,并使用 VfsPosix 类来挂载主机的文件系统。os 模块已与所有其他硬件合并,最小和标准变体获得 unlink、chdir、getcwd 和 listdir 功能。

windows 移植也切换到了 VFS 子系统和 VfsPosix。它在 dev 上添加了对 micropython.schedule 和 uasyncio 的支持。并且 BCryptGenRandom 已用于实现 os.urandom。

zephyr 平台将 Zephyr 升级到 v3.0.0。

自上一版本以来各种硬件平台代码大小变化是(文本部分中的绝对变化和百分比变化):

       bare-arm:   +792  +1.394%
    minimal x86:  +2091  +1.286%
       unix x64: +10231  +1.995%
    unix nanbox:  +9777  +2.162%
          stm32:   +184  +0.047% PYBV10
         cc3200:   +904  +0.493%
        esp8266:  -1240  -0.177% GENERIC
          esp32:  +6464  +0.425% GENERIC
            nrf: +11288  +6.472% pca10040
            rp2: +14432  +2.929% PICO
           samd:  +1352  +0.970% ADAFRUIT_ITSYBITSY_M4_EXPRESS

 

这些数字的变化是因为:

  • bare-arm、minimal、cc3200、samd:重新设计字节码和 mpy 格式,优化跳转操作码以使用 1 字节偏移量,在模块级别对常量进行重复数据删除,以及 PEP 448 支持

  • unix:切换到使用 VFS,以及新的 mpy 格式和相关更改

  • esp8266:删除 esp.info 和 machine.WDT.deinit

  • esp32:添加 machine.ADCBlock,以及新的 mpy 格式更改

  • nrf:启用 uasyncio,启用 MICROPY_PY_IO

  • rp2:使用 mbedtls 启用 ucryptolib

 

请注意,stm32 平台的大小大致保持不变。这是因为它有相当数量的冻结 Python 代码,并且由于重新处理的字节码而导致的冻结代码大小的减少抵消了更改而导致的运行时/VM 大小的增加。bare-arm、minimal、cc3200 和 samd 等平台没有任何冻结代码,因此只会看到运行时/VM 大小的增加。具有大量冻结代码的生产级项目的固件大小总体减少了约 4%。

感谢为此版本做出贡献的所有人:Algy Tynan, Andrew Leech, Andrew Scheller, Artyom Skrobov, Asensio Lorenzo Sempere, Bradley Wogsland, Cem Eliguzel, Chris Wilson, Christian Decker, Christian Zietz, Christophe Priouzeau, Clayton Mills, Damien George, Daniel Jour, Daniël van de Giessen, Dave Hylands, David Lechner, Emil Kondayan, Herwin Grobben, iabdalkader, IhorNehrutsa, Jan, Jared Hancock, jason, Jeff Epler, Jeremy Herbert, Jim Mussared, Jon Bjarni Bjarnason, Jonathan Hogg, Jos Verlinde, Kattni Rembor, Lars Kellogg-Stedman, Luiz Brandao, marcidy, Martin Fischer, Maureen Helm, Meriç SARIIŞIK, Michael Himing, Michael O'Cleirigh, MikeTeachman, Peter D. Gray, Peter Hinch, Peter Züger, Phil Howard, Philipp Ebensberger, Rob Knegjens, robert-hh, Sean Coates, Seon Rozenblum, Stephane Smith, stijn, Takeo Takahashi, ubi de feo, Waterlens, wemos, YoungJoon Chun, Yukai Li.


回复

5381

帖子

18

资源

五彩晶圆(中级)

贡献的不少啊,这就是社区活力。

点评

开源世界  详情 回复 发表于 2022-6-16 21:09
个人签名

默认摸鱼


回复

1万

帖子

14

资源

版主

freebsder 发表于 2022-6-16 18:41 贡献的不少啊,这就是社区活力。

开源世界


回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    关闭
    站长推荐上一条 1/8 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表