最新回复
编译与字节码
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
| ||
|
||
| |
|
|
点评 | ||
|
||
点评 | ||
|
||
点评 | ||
|
||
| ||
|
||
| ||
|
||
论坛测评队员
曾经的版主且威望大于2000,或对EEWORLD论坛有突出贡献的坛友
EEWorld Datasheet 技术支持