7630|6

1万

帖子

25

TA的资源

版主

楼主
 

Zerynth的一点体会 [复制链接]

 这几天尝试了一下Zerynth,在不同开发板和操作系统上进行了试用,也在官方网站和社区了解一番。下面是一点体会,不一定准确,欢迎大家一起来讨论,特别是希望 @allankliu 多给出一点意见。

  • Zerynth使用方法和风格上类似Arduino,包括函数、接口等,只是开发语言从C++变为了python
  • 虽然使用python语言进行开发,但是Zerynth会将python程序变为二进制代码(感觉是调用编译器进行编译),然后下载运行。下载前需要复位芯片(一部分开发板需要手工复位),然后才能下载运行。
  • Zerynth的模式是先在芯片中下载一个虚拟机(VM,我感觉更像是Bootloader),然后执行用户程序
  • Zerynth只能使用它自己的IDE进行开发,不能使用其它编辑器,也只支持64位的操作系统
  • 虽然Zerynth软件并不大,但添加新的开发板会自动从网上下载对应的开发环境,因此需要在系统盘留出足够大的空间
  • Zerynth不是开源的,不能直接将它集成到自己的系统中
  • Zerynth没有提供源码
  • Zerynth支持好几种流行的开发板,但是没有自己的开发板(只有一个shield)
  • 在Linux下的使用体验比Windows下好



看起来Zerynth是希望快速演变为商用化的系统,让用户使用它提供的完整方案,而不是用户自己定制和DIY。它的完成度和开放性比MicroPython差,扩展性也不如MicroPython,但是可能会更快进入商业应用。





最新回复

编译与字节码 CPython的流程是将Python源码编译成Bytecode,然后由Python VM逐句执行ByteCode。Zerynth也是如此,Virtualize是将VM(不是Bootloader)下载到ROM中,然后将由VM执行ByteCode。如果你使用过它的调试方式,(对,它是可以调试的)可以看到底层Python3.4的ByteCode。这是他的架构图: |---------------------------------------------------------| |          Zerynth bytecode   |       C  object code      | |---------------------------------------------------------| |                        Zerynth VM                       | |---------------------------------------------------------| |         VHAL     --|-->  VOSAL                          | |                    |------------------------------------| |                    | RTOS                               | |---------------------------------------------------------| |             Hardware: MCU + Peripherals                 | |---------------------------------------------------------|复制代码 点击编译(或Verify),项目被分为Python和C代码(包括驱动层和用户C程序)。流程是: - Python编译为Zerynth的Python bytecode子集,与硬件无关,并可以在调试器中查看。 - C变成目标码,与硬件有关。 两种代码被uplink到硬件中。之所以名称比较特殊,因为不仅仅是简单的上传。VM会解析C的符号表并与自己保存的进行对比。比如调用代码中如果调用memcpy,那么VM中已经有对应的版本,那么VM会通知IDE做修改。这个过程对用户是透明的。所以只会看到“交换”了多少符号表。 所以,Zerynth是参照CPython的方式运行的,但又有所不同。之所以你看到了GCC的动作,那是因为在桌面版CPython运行中,这个过程是透明的,而Zerynth是显性的。以下是Logfile,你可以看到编译库(to bytecode),编译底层驱动(to obj),编译C源码(因为支持混合编程),链接下载。其中Bytecode会作为ROM table存在。 尤其是支持Python/C混合编程,我认为这是他的强项之一。micropython之所以在ISR部分介绍那么多, [REMOTE]: Trying to login... Hello Zerynth! Hello Zerynth! [COMPILER]: Compiling ZERYNTH code for st_nucleof401re [COMPILER]: Compiling module [__main__] [COMPILER]: Compiling module [__builtins__] [COMPILER]: Compiling module [streams] [COMPILER]: Compiling module [adc] [COMPILER]: Compiling module [__main__] [COMPILER]: Compiling module [__builtins__] [COMPILER]: Compiling module [streams] [COMPILER]: Compiling module [adc] [COMPILER]: Compiling C code... [COMPILER]: Getting: C:\Users\allankliu\zerynth\env\core\official\stdlib\csrc/vbl/vbl_adc.c from cache [COMPILER]: Getting: C:\Users\allankliu\zerynth\env\core\official\vhal\armcmx\stm32f4\vhal_dma.c from cache [COMPILER]: Getting: C:\Users\allankliu\zerynth\env\core\official\vhal\armcmx\stm32f4\vhal_adc.c from cache [COMPILER]: Linking C code... [COMPILER]: Everything Done! ################################################################################ #       Please RESET your ST Nucleo F401RE in the next 5 seconds ################################################################################ Opening board [url=home.php?mod=space&uid=11648]@baud[/url] 115200 attempt 0 Board found Probe sent ZERYNTH VM found (04b7421f-60f7-451b-9286-26e9ea1e5deb for st_nucleof401re) Starting the UpLinking phase...     symbols:  159     membase  @2000203C     romstart @08020000     flash    @00060000 Erasing flash... Sending Bytecode: 10156 bytes (available 393216) Enjoy your ZERYNTH code! 复制代码 实际上,micropython也采用了类似的方式,但是更加隐蔽。虽然不知道George所指的native code和viper code,但是bytecode的确是他衡量的目标。具体的实现还是要看源码。 他的原文:https://www.kickstarter.com/proj ... ollers/posts/665145 开源与闭源 在Zerynth网页中,VM有两个许可证:GPLv3和商业许可证。至于是否可以改动I/O,我需要进一步评估。Github上Zerynth的软件仓库虽然多,但是core部分只有一点儿。 几个与嵌入式Python相关的设计中,pymite/pymbed是被荒弃的,虽然评估下来可用,但是没有技术支持。micropython的开发是主动的,支持也依靠自己或社区。Zerynth的覆盖面是窄的,但是支持是商业化的。完全不同的方向。 对我来说,无所谓哪一家的平台,都很有研究价值。而且许多Python应用代码可以彼此借鉴,甚好。 我个人更加关心Python在应用层面和系统整合方面的案例,至少应该有一些相对复杂点儿的设计。这样才是Python的优势所在,这一点micropython-lib/pip和Zerynth Package Manager都做的很不错。 我会先写几篇教程出来。  详情 回复 发表于 2016-9-16 09:22
点赞 关注
 
 

回复
举报

2721

帖子

0

TA的资源

纯净的硅(中级)

沙发
 
中秋快乐
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
本帖最后由 allankliu 于 2016-9-15 17:55 编辑

闭源或开源,一度以为他们式商业服务,但是后来发现许多源码(至少部分源码)在安装路径中可以找到。但是否全开源,有待考察,可能VM部分是闭源的。
编译或解释,Python本身有编译和解释字节码两部分,Zerynth支持与C语言混合编程,而且这样对于开发者知识产权,尤其是商业开发比较有利。
64bit OS,无论Linux/Windows都必须64bit,这个现在是趋势了。Ubuntu日后没有32bit版本了。
软件交付,Zerynth网站中下载的是Installer,继而下载整个程序,考虑点是避免第三方网站下载所导致的病毒。
Zerynth IDE,其开发环境是开源的,基于Python+node.js,只是没有做成命令行模式而已。
开发板覆盖,其开发板还不够多。至于有没有官方开发板,我觉得不太重要。
系统集成,不太能够理解无法集成的意思。比如NUCLEO-F401,可以开发出自己的系统板。

他们与Git集成,社交化编程,以及较为丰富的社区和官方库,大多直面硬件和中间件。有些蛮实用的。

不过你所关心的开源与业务模式,我会找机会问问。我个人觉得他们的弱项:

1)没有REPL;
2)没有Unix/Linux Port;
3)没有Pypi;
4)业务模式和许可证不明;
5)软件交付与社区论坛面对欧美优化,未对中国优化;
6)硬件覆盖率不高,与4)有关,社区驱动力不强。

点评

python支持编译功能,但实际还是在执行脚本。而Zerynth看起来不是这样的,它的程序模式和Arduino差不多,自己做了一层封装,提供了一个简单易用的接口,但是程序最终是用C++去编译的,并不是真正执行python程序。只  详情 回复 发表于 2016-9-15 22:07
 
 
 

回复

1万

帖子

25

TA的资源

版主

4
 
本帖最后由 dcexpert 于 2016-9-15 22:20 编辑
allankliu 发表于 2016-9-15 17:50
闭源或开源,一度以为他们式商业服务,但是后来发现许多源码(至少部分源码)在安装路径中可以找到。但是否 ...

python支持编译功能,但实际还是在执行脚本。而Zerynth看起来不是这样的,它的程序模式和Arduino差不多,自己做了一层封装,提供了一个简单易用的接口,但是程序最终是用C++去编译的,并不是真正执行python程序。只是表面上用python执行。

Zerynth也没有提供硬件和软件方面的接口,用户不能根据自己的需要去定制,这对应很多应用来说是不方便的。虽然它支持很多开发板,但是只能用官方提供的固件(VM),GPIO、ADC、I2C的定义都是无法修改的。或者说如果要自己做一个板子,就只能和这些板子的定义完全相同才行。或许以后会增加外设引脚重定义功能。

我感觉是Zerynth更多考虑的是商业化应用,而不是技术上的问题,这样它就不会开放太多,它更像是一个闭源的Arduino。Zerynth可能会是一个成功的产品或软件,但不会变成象Arduino那样的开源软件。

点评

编译与字节码 CPython的流程是将Python源码编译成Bytecode,然后由Python VM逐句执行ByteCode。Zerynth也是如此,Virtualize是将VM(不是Bootloader)下载到ROM中,然后将由VM执行ByteCode。如果你使用过它的调  详情 回复 发表于 2016-9-16 09:22
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(高级)

5
 
dcexpert 发表于 2016-9-15 22:07
python支持编译功能,但实际还是在执行脚本。而Zerynth看起来不是这样的,它的程序模式和Arduino差不多, ...

编译与字节码


CPython的流程是将Python源码编译成Bytecode,然后由Python VM逐句执行ByteCode。Zerynth也是如此,Virtualize是将VM(不是Bootloader)下载到ROM中,然后将由VM执行ByteCode。如果你使用过它的调试方式,(对,它是可以调试的)可以看到底层Python3.4的ByteCode。这是他的架构图:

  1. |---------------------------------------------------------|
  2. |          Zerynth bytecode   |       C  object code      |
  3. |---------------------------------------------------------|
  4. |                        Zerynth VM                       |
  5. |---------------------------------------------------------|
  6. |         VHAL     --|-->  VOSAL                          |
  7. |                    |------------------------------------|
  8. |                    | RTOS                               |
  9. |---------------------------------------------------------|
  10. |             Hardware: MCU + Peripherals                 |
  11. |---------------------------------------------------------|
复制代码


点击编译(或Verify),项目被分为Python和C代码(包括驱动层和用户C程序)。流程是:

- Python编译为Zerynth的Python bytecode子集,与硬件无关,并可以在调试器中查看。
- C变成目标码,与硬件有关。

两种代码被uplink到硬件中。之所以名称比较特殊,因为不仅仅是简单的上传。VM会解析C的符号表并与自己保存的进行对比。比如调用代码中如果调用memcpy,那么VM中已经有对应的版本,那么VM会通知IDE做修改。这个过程对用户是透明的。所以只会看到“交换”了多少符号表。

所以,Zerynth是参照CPython的方式运行的,但又有所不同。之所以你看到了GCC的动作,那是因为在桌面版CPython运行中,这个过程是透明的,而Zerynth是显性的。以下是Logfile,你可以看到编译库(to bytecode),编译底层驱动(to obj),编译C源码(因为支持混合编程),链接下载。其中Bytecode会作为ROM table存在。

尤其是支持Python/C混合编程,我认为这是他的强项之一。micropython之所以在ISR部分介绍那么多,

  1. [REMOTE]: Trying to login...
  2. Hello Zerynth!
  3. Hello Zerynth!

  4. [COMPILER]: Compiling ZERYNTH code for st_nucleof401re
  5. [COMPILER]: Compiling module [__main__]
  6. [COMPILER]: Compiling module [__builtins__]
  7. [COMPILER]: Compiling module [streams]
  8. [COMPILER]: Compiling module [adc]
  9. [COMPILER]: Compiling module [__main__]
  10. [COMPILER]: Compiling module [__builtins__]
  11. [COMPILER]: Compiling module [streams]
  12. [COMPILER]: Compiling module [adc]
  13. [COMPILER]: Compiling C code...
  14. [COMPILER]: Getting: C:\Users\allankliu\zerynth\env\core\official\stdlib\csrc/vbl/vbl_adc.c from cache
  15. [COMPILER]: Getting: C:\Users\allankliu\zerynth\env\core\official\vhal\armcmx\stm32f4\vhal_dma.c from cache
  16. [COMPILER]: Getting: C:\Users\allankliu\zerynth\env\core\official\vhal\armcmx\stm32f4\vhal_adc.c from cache
  17. [COMPILER]: Linking C code...
  18. [COMPILER]: Everything Done!

  19. ################################################################################
  20. #       Please RESET your ST Nucleo F401RE in the next 5 seconds
  21. ################################################################################

  22. Opening board [url=home.php?mod=space&uid=11648]@baud[/url] 115200
  23. attempt 0
  24. Board found
  25. Probe sent
  26. ZERYNTH VM found (04b7421f-60f7-451b-9286-26e9ea1e5deb for st_nucleof401re)
  27. Starting the UpLinking phase...
  28.     symbols:  159
  29.     membase  @2000203C
  30.     romstart @08020000
  31.     flash    @00060000
  32. Erasing flash...
  33. Sending Bytecode: 10156 bytes (available 393216)
  34. Enjoy your ZERYNTH code!
复制代码


实际上,micropython也采用了类似的方式,但是更加隐蔽。虽然不知道George所指的native code和viper code,但是bytecode的确是他衡量的目标。具体的实现还是要看源码。

他的原文:https://www.kickstarter.com/proj ... ollers/posts/665145

开源与闭源

在Zerynth网页中,VM有两个许可证:GPLv3和商业许可证。至于是否可以改动I/O,我需要进一步评估。Github上Zerynth的软件仓库虽然多,但是core部分只有一点儿。

几个与嵌入式Python相关的设计中,pymite/pymbed是被荒弃的,虽然评估下来可用,但是没有技术支持。micropython的开发是主动的,支持也依靠自己或社区。Zerynth的覆盖面是窄的,但是支持是商业化的。完全不同的方向。

对我来说,无所谓哪一家的平台,都很有研究价值。而且许多Python应用代码可以彼此借鉴,甚好。

我个人更加关心Python在应用层面和系统整合方面的案例,至少应该有一些相对复杂点儿的设计。这样才是Python的优势所在,这一点micropython-lib/pip和Zerynth Package Manager都做的很不错。

我会先写几篇教程出来。

点评

其实这段消息就已经说明zerynth目前在STM32上采用了编译模式,将python程序变为了C程序。 稍微看了一下zerynth的目录结构和文件,包括VM、vhal、board、stdlib等。看起来在stdlib中将python语句翻译为C函数,  详情 回复 发表于 2016-9-16 12:57
看了这个解释就更清楚一些了,Zerynth的方法和其它有些不同,有它自己的模式。 那篇测试中,因为代码太简洁,不同编译器的优化不一样,结果差异太大,viper速度最快,如果换一个代码结果可能就很难说,需要更全面  详情 回复 发表于 2016-9-16 12:46
 
 
 

回复

1万

帖子

25

TA的资源

版主

6
 
allankliu 发表于 2016-9-16 09:22
编译与字节码


CPython的流程是将Python源码编译成Bytecode,然后由Python VM逐句执行ByteCode。Zery ...

看了这个解释就更清楚一些了,Zerynth的方法和其它有些不同,有它自己的模式。

那篇测试中,因为代码太简洁,不同编译器的优化不一样,结果差异太大,viper速度最快,如果换一个代码结果可能就很难说,需要更全面的测试才清楚。

感觉上pymite是micropython、Zerynth等的前身,可惜没有完成就中止了。
 
 
 

回复

1万

帖子

25

TA的资源

版主

7
 
allankliu 发表于 2016-9-16 09:22
编译与字节码


CPython的流程是将Python源码编译成Bytecode,然后由Python VM逐句执行ByteCode。Zery ...[/quote]

[quote][COMPILER]: Compiling ZERYNTH code for st_nucleof401re
[COMPILER]: Compiling module [__main__]
[COMPILER]: Compiling module [__builtins__]
[COMPILER]: Compiling module [streams]
[COMPILER]: Compiling module [adc]
[COMPILER]: Compiling module [__main__]
[COMPILER]: Compiling module [__builtins__]
[COMPILER]: Compiling module [streams]
[COMPILER]: Compiling module [adc]
[COMPILER]: Compiling C code...
[COMPILER]: Getting: C:\Users\allankliu\zerynth\env\core\official\stdlib\csrc/vbl/vbl_adc.c from cache
[COMPILER]: Getting: C:\Users\allankliu\zerynth\env\core\official\vhal\armcmx\stm32f4\vhal_dma.c from cache
[COMPILER]: Getting: C:\Users\allankliu\zerynth\env\core\official\vhal\armcmx\stm32f4\vhal_adc.c from cache
[COMPILER]: Linking C code...
[COMPILER]: Everything Done!


其实这段消息就已经说明zerynth目前在STM32上采用了编译模式,将python程序变为了C程序。

稍微看了一下zerynth的目录结构和文件,包括VM、vhal、board、stdlib等。看起来在stdlib中将python语句翻译为C函数,和Arduino的模式是一样的(将Arduino的函数翻译为对应的C函数)。

好处是效率比直接执行脚本高,缺点是不够灵活,各有利弊吧。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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