我在使用1.18版本的种子肖(SAMD21)上使用micropython,并希望使用“已编译的”库(.mpy)来节省空间。我在第5版中遇到了麻烦,这对我来说很好。我也希望有浮点,所以我用这个选项构建了一个新的micropython --从最新的(20220302) github版本开始--并注意到mpy-cross已经更新到版本6。我想我会检查使用了哪些版本的.mpy,而micropython文档建议了一些代码来检查使用sys.implementation对象的.mpy版本。我注意到了各种sys.implementation实现。
micropython 20220117发布的版本1.18- -在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'>
>>> 这返回了一个包含两个项的元组--名称和带有版本信息的元组。但是没有关于mpy版本的信息。
然后,我为RP2040 NANO尝试了发布的1.18版本(并在我的肖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版本的额外数据。
我的问题是,如何在我的肖SAMD2实现中获得一致的结果?我应该包括还是排除哪个选项?还是我不应该担心?我正在研究是切换到Python,还是继续使用C(++),因为这个小处理器倾向于C(++)。
谢谢
发布于 2022-03-27 18:05:12
如果您想使用预编译/字节码.mpy文件,那么您将需要决定使用字节码或编译为您的mcu平台的本机代码。
对于字节码,您需要分发一个与运行时固件1.12-1.18 == 5匹配的字节码版本,下一个版本将增加。
对于本机代码,您需要为要支持的每个平台分发版本。esp32c3不能运行stm32本机代码,反之亦然。
另外,不同的端口/板在一些stdlib API中确实会有差异。您的代码必须足够健壮,以处理这些差异。
https://stackoverflow.com/questions/71330735
复制相似问题