CircuitPython vs MicroPython

CircuitPython vs MicroPython

(本文内容部分翻译自CircuitPython项目的readme文档)

CircuitPython基于MicroPython, 由Adafruit赞助, 并为Adafruit出品的教育开发板进行了移植.

个人感觉CircuitPython对MicroPython进行了进一步的规范,毕竟是在前人的基础上进行开发, 又有商业公司提供赞助, 考虑的问题更加全面和贴近用户, 质量上应该提升不少.

CircuitPython同MicroPython的区别在于:

功能差异:

  • 所有支持的芯片均带有USB外设, 下载代码均基于USB通信, 因此均不需要借助额外工具.

  • 到目前为止, 仅支持SAMD21 (ARM Cortex-M0+), SAMD51 (ARM Cortex-M4), nRF52840, CXD56, STM32F4 (ARM Cortex-M4)和i.MX RT (ARM Cortex-M7)平台的移植.

  • 继续跟踪MicroPython的发布(但不是主线发布, 可能更超前一些).

  • 在所有的工程中都支持十进制浮点数.

  • 报错信息被翻译成了10+种语言.

  • 在python内部不支持并发(例如中断和多线程), 但是某些并发机制可以通过功能模块执行任务的本身实现, 例如播放音频文件.

运行过程差异:

  • 在老版本中, 多个脚本文件按照顺序执行时, 它们之间的变量和状态都是共享的. 但是CircuitPython的初衷是要简化每个文件的功能, 让各个文件中的变量相对独立.

  • 板子启动过程中, 在USB初始化之前, 先执行一次boot.py(或者settings.py)脚本文件. 这个过程也可以对USB的启动进行设置, 而不是仅能使用固定的USB配置. 由于此时尚未使用USB串口(USB CDC), 输出将被写入到boot_out.txt文件中.

  • 板子启动之后, 将会继续执行code.py(或main.py)文件中的脚本, 直到它的内容被执行完毕或者被中断. 它执行完毕后, 硬件会重新执行初始化(但不执行USB的部分). 这意味着, 在REPL中不能读取code.py中的状态. CircuitPython使用了这个运行过程, 就是要减少对重复使用内存和引脚的误会.

  • 运行完code.py之后, 需要再串口终端中输入任意字符, 才能激活REPL. 由于REPL不再同code.py共享变量和状态, 它将使用一个干净的运行时环境.

  • 在交叉重载模块的情况下, 自动载入模块状态的功能仍然保留.

  • 增加了一个"安全模式". 在出现硬件错误后不再运行用户程序, 以方便调试定位错误位置. The hope is that this will make it easier to fix code that causes nasty crashes by making it available through mass storage after the crash. (这句话实在是不知道怎么翻译). 在修复问题之后, 需要按复位按键才能恢复到正常模式.

  • 使用RGB状态指示灯的一系列颜色变化指示CircuitPython的工作状态和错误状态.

  • 将code.py或其它用户脚本文件(main)写入USB的文件系统后, 将重新运行code.py.

  • 在用户脚本文件(main)运行后, 通过在终端中输入一个按键, 才能进入REPL, 并关闭自动载入用户脚本文件.

  • 用户脚本文件(main)的文件名可以是如下其中之一: code.txt, code.py, main.txt, main.py

  • 启动脚本文件(boot)的文件名可以是如下其中之一: settings.txt, settings.py, boot.py, boot.txt.

用户脚本中可调用的API

  • 统一了调用硬件功能的API, 在页面 ReadTheDocs有规整且详细的描述.

  • API文档嵌入到C文件中. 意思是说, 对C源文件中的API进行了详细的说明, 可用于单独提取API文档.

  • 不再使用"machine" API. "machine"和"pyb"都可以操作硬件, 但是"machine"更像是一个在开发过程中用于临时调试的模块, 而"pyb"才是规范地供用户使用的模块.

模块

  • 取消了容易错误识别的模块. 使用"os"和"time"模块取代了 “uos"和"utime”. 现在, “os”, "time"和"random"的实现同CPython兼容.

  • 创建新的"storage"模块管理文件系统. 在MicroPython中使用"uos"实现类似的功能.

  • 从CPython中引入了一些模块, 例如"time", “os”, “random”, 它们实现了CPython相应模块的子集.

  • 可以通过"time.monotonic()"查看当前系统运行时间的滴答值.

你可能感兴趣的:(MicroPython)