micropython运行机制
MicroPython 内部运行机制
MicroPython 是把 .py 文件当作一个模块.在导入模块执行时, 会将此模块当作一个字节码对象 PyCodeObject, 而不是 .pyc 文件.因为在 Python 世界里, 一切都是对像, 类也是对像[1] .在程序
运行期间, 编译的结果 PyCodeObject 只会存于内存中, 而当这个模块的 Python 代码执行完后, 就会将编译的结果保存到. pyc 文件中, 下次运行时直接加载到内存中使用. PyCodeObject 包含了Python 源码中的字符串、常量值及解析后编译生成的字节码指令.
.pyc 文件也称作字节码文件, 因为它存储的是一些二进制的字节数据.一个.pyc 文件包含了3 个部份的信息: magic number 信息、文件创建的时间信息以及 PyCodeObject 对象.前面提到当已经存在 .pyc 文件时, 就可以直接载入而省去编译过程.但是代码的内容会更新, 如何保证更新后能重新编译而不入旧的 .pyc 文件呢? 当执行导入指令时, 如果存在 .pyc 文件, MicroPython 会自动检查代码的创建时间, 并使用最新的 .pyc 文件.
在 .py 文件被编译后, 接下来的工作就是由 MicroPython 虚拟机来执行字节码指令了.
在 MicroPython 中主要使用标记清除的方式来实现垃圾收集, 不存在内存泄露的风险。
使用 MicroPython 中自定义的 pyb 类就能够实现对控制器底层设备进行快速访问。还提供一个 C 应用程序接口和简单易用的硬件抽象层, 实现对微控制寄存器进行访问。
整体代码运行流程如图 3 所示