micropython 和 sys.implementation- 在 XIAO SAMD21 和 XIAO RP2040 上不同

micropython and sys.implementation- different on XIAO SAMD21 and XIAO RP2040

我在使用 1.18 版的 SEEED XIAO (SAMD21) 上使用 micropython,并想使用 'compiled' 个库 (.mpy) 来保存 space。我有版本 5 的 mpy-cross,它对我来说没问题。我也想有浮点数,所以我用那个选项构建了一个新的 micropython——从最新的 (20220302) github 版本开始——并注意到 mpy-cross 已经更新到版本 6。我想我会检查看看哪个使用了 .mpy 的版本 micropython 文档建议使用一些代码来使用 sys.implementation 对象检查 .mpy 的版本。我注意到各种 sys.implementation 实现。

版本 1.18- micropython 20220117 在 XIAO SAMD21 上发布的结果如下:

MicroPython v1.18 on 2022-01-17; Seeed Xiao with SAMD21G18A
Type "help()" for more information.
>>> import sys
>>> sys.implementation
('micropython', (1, 18, 0))
>>> type(sys.implementation)
<class 'tuple'>
>>> 

这返回了一个包含 2 个项目的元组 - 名称和一个包含版本信息的元组。但没有关于 mpy 版本的信息。

然后我尝试了 RP2040 NANO 发布的 1.18 版本(运行 它在我的 XIAO RP2040 上):

MPY: soft reboot
MicroPython v1.18 on 2022-01-17; Raspberry Pi Pico with RP2040
Type "help()" for more information.
>>> import sys
>>> sys.implementation
(name='micropython', version=(1, 18, 0), mpy=5637)
>>> type(sys.implementation)
<class 'tuple'>
>>> 

此处返回的结果是具有 3 个属性的元组 - 名为属性 - 和一个 mpy 版本(5637 & 0xff = 5)。然后我使用 #define MICROPY_PERSISTENT_CODE_LOAD (1) 选项重新编译 micropython 以尝试匹配 RP2040 输出:

MPY: soft reboot
MicroPython v1.18-169-g665f0e2a6-dirty on 2022-03-02; Seeed Xiao with SAMD21G18A
Type "help()" for more information.
>>> import sys
>>> sys.implementation
('micropython', (1, 18, 0), 6)
>>> type(sys.implementation)
<class 'tuple'>
>>> 

现在 mpy 版本 (6) 返回一个包含 3 个项目的元组,但不是命名元组,mpy 版本没有额外数据。

我的问题是如何在我的 XIAO SAMD2 实现中获得一致的结果?我应该包括或排除哪个选项?或者我不应该担心吗?我正在研究是切换到 Python 还是继续为这个小型处理器使用 C(++) - 倾向于 C(++)。

谢谢

如果你想使用 precompiled/bytecode .mpy 文件,那么你需要 决定为您的 mcu 平台使用字节码或编译为本机代码。

对于字节码,您需要分发与运行时代固件匹配的字节码版本,1.12-1.18 == 5,下一个版本将增加

对于本机代码,您需要为要支持的每个平台分发版本。 esp32c3 不能 运行 stm32 本机代码和 vice-versa

此外,不同的 ports/board 在某些标准库 API 中确实会有差异。您的代码必须足够健壮才能处理这些差异。