MicroPython 在嵌入式开发中的兴起

电子说

1.2w人已加入

描述

换岗:MicroPython 在嵌入式开发中的崛起

MicroPython 技术演进

计算机编程语言是对技术发展的一项引人入胜的研究。从机器代码和汇编语言到 CBOL 和 FORTRAN 等第一批高级语言,向更强大但更易于理解的语言迈进使得开发周期更快,并将编程带给越来越广泛的创作者,从专业到业余。

在 Arduino 和 Raspberry Pis 出现之前,许多原型制造商开始使用 PBASIC 和微控制器,例如 BASIC Stamp。在专业的嵌入式领域,C 编程语言长期以来一直占据着至高无上的地位。实际上,Arduino“编程语言”由一组 C/C++ 函数组成。这允许抽象出各种嵌入式设备编程的复杂性,从而对那些刚刚开始嵌入式电子教育的人更加友好。因此,虽然 C 语言的主导地位仍然相当稳固,但变革之风正在酝酿之中。输入 Python 编程语言。

根据 2020 年 7 月的 IEEE 研究,Python 是 2020 年最流行的编程语言。它的创建者 Guido van Rossum 解释说,创建 Python 的原因如下:

“我在 CWI 的 ABC 小组实施解释性语言方面拥有丰富的经验,并且通过与这个小组的合作,我学到了很多关于语言设计的知识。这是许多 Python 特性的起源,包括使用缩进进行语句分组和包含非常高级的数据类型。”

Guido 继续解释其他语言对 Python 设计选择的影响:

“Modula-3 是用于异常和其他一些 Python 特性的语法和语义的起源。”

还:

“我在 Amoeba 中处理错误的经历让我敏锐地意识到异常作为一种编程语言特性的重要性。”

Python 编程语言于 30 多年前首次发布。Python 代码首先被编译成字节码,然后提供给解释器,这是一个大型 C 程序(看,你就是无法避免 C)。Python 的一个流行方面是交互式解释器模式或读取-评估-打印-循环 (REPL),这是一种通过命令行交互式提示与 Python 交互以在将代码提交到.py文件之前测试概念的方法。MicroPython 固件也可以在没有编译器的情况下构建和运行,因为虚拟机可以运行预编译 ( .mpy) 程序。

快进到 2014 年,MicroPython 发布了。对于具有桌面编程经验的人,您可能会使用称为 CPython 的特定 Python 实现,这是该语言的参考实现。MicroPython 只是另一种实现,它针对内存和处理受限的硬件(例如微控制器)进行了优化。MicroPython 包含完整的 Python 3 编译器、运行时和 Python 标准库的子集。顺便说一句,MicroPython 已经分叉到 CircuitPython 中,后者更专注于教育和创客社区。以下是 MicroPython 在嵌入式开发中的多功能性和影响力的示例。

使用 MicroPython 对微控制器进行编程的快速和肮脏

MicroPython 解释器可用于许多具有各种硬件功能的开发板上。获取基于MicroPython的开发板时,首先要做的是将解释器固件更新到最新版本。这是通过访问 MicroPython固件网站并为您的特定开发板下载最新的设备固件更新 ( .dfu) 文件来完成的。每块板都有不同的进入更新模式的物理方法。它通常涉及在向电路板供电时将某个引脚短接至电压或接地。将开发板插入计算机并设置为更新模式后,启动一个名为dfu-util的实用程序,将新固件刷入开发板。

确切的使用机制dfu-util将因您的主机系统操作系统(Windows、Mac OS、Linux)而异。如果使用基于 Windows 的主机,可能需要一些额外的步骤。

完成后,从开发板上拔下 USB 电缆并重新插入。开发板应枚举为可移动介质,例如 USB 闪存驱动器或光盘。该驱动器应列为/flash,并且应包含以下四个文件:

boot.py:包含特定开发板的配置信息。

main.py:包含您的特定应用程序的源代码。

pybcdc.inf:这是一个 Windows 驱动程序文件,可以让主机作为串行 USB 设备与开发板接口。

readme.txt:开发人员可以在其中向最终用户或可能希望派生 main.py 文件以满足自己需求的开发人员留下任何注释的文件。

可以通过主机上的串行终端使用 REPL 与开发板进行交互。或者,我们可以使用代码编辑器来编辑主.py文件。MicroPython 和相关开发板的一个巧妙特性是源代码保留为用户可访问的文件。只需将开发板插入计算机,它就会枚举为可移动存储设备。然后可以在最终用户选择的代码编辑器中直接查看和编辑源代码文件。然后弹出开发板,拔下电源并给开发板加电,执行新的或修改后的源代码。

一些开发工具能够处理 MicroPython。一些更受欢迎的选择包括:

Mu:一个免费的、准系统的编辑器,有很多花里胡哨的功能,包括代码完成、REPL、文件管理器,以及通过简单的鼠标点击来整理代码的能力。这是一个很好的入门平台,在简单性方面与 Arduino IDE 最为相似。

PyCharm:PyCharm 提供免费社区版和付费专业版,是 Python 开发环境的主力。免费版本包含仅供其他类似开发工具的付费版本使用的功能。调试器、重构、代码检查、即时错误突出显示和快速修复等功能都是免费提供的。

Visual Studio Code:万能的代码编辑器,已经成为许多开发人员的默认编辑器。Microsoft 提供的这一免费产品易于扩展,并且可以与 GitHub 等其他第三方工具集成。这可以使 Visual Studio Code 成为 MicroPython 项目的一体化开发环境。

编写 CPython 和 MicroPython 代码之间的实际差异

MicroPython 已经移植到许多基于 Arm ® Cortex ® -M4的嵌入式平台(包括STM32、TI CC3200 /WiPy、Teensy boards、Nordic nRF 系列、SAMD21和 SAMD51),此外,它还被移植到其他架构,如 ESP8266 、ESP32、16 位 PIC、RISC-V(RV32 和 RV64),甚至 Lego Mindstorms EV3。MicroPython 必须应对大量不同的体系结构和嵌入式系统规范,而 CPython 的环境相对更加单一(主要是 x86/x64 和 ARM 体系结构)。因此,CPython 和 MicroPython 之间存在一些并非微不足道的差异。一些主要区别包括:

如何添加自定义库:与 CPython 不同,MicroPython 不理解当前目录的概念。因此,虽然它也用于sys.path查找模块,但它是相对于0:/(指的是开发板的内部闪存)或相对于1:/(指的是 SD 卡,如果开发板配备的话)。创建模块有两种方法。

第一种选择是在闪存或 SD 卡的根目录下创建一个文件,例如mymodule.py. 然后在 中main.py,只需添加一行 with import mymodule,位于其中的所有功能都module.py将对 可用main.py。

第二个选项是在根目录中创建一个目录,例如,mymodule. 在mymodule文件夹,创建一个名为的文件__init__.py并在文件中添加任何需要的自定义函数。然后从内部main.py添加行import mymodule。

在任何一种情况下,要访问存储在 SD 卡上的任何模块,该行sys.path.append('1:/')也必须添加到main.py.
 

内存管理:CPython 使用自动引用计数作为内存管理的手段,而 MicroPython 使用垃圾收集。

有限的和特定于微的模块:Python 的主要便利之一是能够轻松导入提供许多有用功能的代码——例如解析 JSON、字符串处理或 Web 套接字编程。但是,MicroPython 无法访问完整的 CPython 模块。此外,许多标准 CPython 模块的 MicroPython 实现考虑了嵌入式硬件的内存和处理速度限制。一些模块使用标准的 Python 名称。其他人以“u”开头;例如, import array(CPython) 和import uarray(MicroPython)。

此外,一些模块是特定于嵌入式硬件的。更通用的导入机器模块允许代码最大限度地提高各种 MicroPython 友好开发板的可移植性。还有特定于电路板的模块,例如导入pyb(针对 pyBoard)或导入esp(针对基于 ESP8266 的电路板)。电路板特定模块利用任何独特的硬件组件或最大限度地提高效率。例如,pyb.delay(ms)或者pyb.disable_irq()是分别请求延迟或禁用中断的机制,专门为 pyBoard 量身定制。此处

提供了可用于 MicroPython 的模块的完整列表。
 

语法差异:

MicroPython 要求文字数字和关键字之间有空格,相比之下,CPython 没有此要求。

MicroPython 允许使用:=赋值给理解变量,CPython 引发 SyntaxError。
 

语言和内置类型差异:

MicroPython 中未实现异常链接。

内置类型的处理方式不同;例如,MicroPython 不支持删除数组。

不支持函数的用户定义属性。

覆盖sys.stdin, sys.stdout, 和sys.stderr是不可能的。

CPython 和 MicroPython 之间的全部差异太多,无法在此一一列举。在大多数情况下,除了最挑剔的 Python 编码人员之外,其他人的差异应该很小。如果您在尝试实现您知道可与 CPython 一起使用的功能时遇到错误,请查看此站点以获取CPython 和 MicroPython 之间的强大差异列表。

开发商,集结!

如果优先考虑速度,则可以在 MicroPython 中编写内联汇编代码。内联汇编程序支持 ARM Thumb-2 指令集的一个子集。内联汇编随后被转换为 Python 函数调用。根据体系结构参考手册,“... [汇编] 指令对 32 位带符号整数数据进行操作,除非另有说明。大多数支持的指令仅在寄存器 R0-R7 上运行:在支持 R8-R15 的地方,有说明。从函数返回之前,寄存器 R8-R12 必须恢复到它们的初始值。寄存器 R13-R15 分别构成链接寄存器、堆栈指针和程序计数器。”

结论

MicroPython 是进入嵌入式开发世界的令人兴奋的新入口。它为专业人士和制造商提供了诱人的新可能性。尽管它可能不适合某些具有极其严格的时序和性能要求的边缘用例,但它可以成为传统 C 编程语言的有力伙伴。再加上 Python 语言的兴起,MicroPython 可以作为希望开始嵌入式硬件开发的桌面应用程序开发人员的桥梁。

.tb_button {padding:1px;cursor:pointer;border-right: 1px solid #8b8b8b;border-left: 1px solid #FFF;border-bottom: 1px solid #fff;}.tb_button.hover {borer:2px outset #def; background-color: #f8f8f8 !important;}.ws_toolbar {z-index:100000} .ws_toolbar .ws_tb_btn {cursor:pointer;border:1px solid #555;padding:3px} .tb_highlight{background-color:yellow} .tb_hide {visibility:hidden} .ws_toolbar img {padding:2px;margin:0px} .tb_button {padding:1px;cursor:pointer;border-right: 1px solid #8b8b8b;border-left: 1px solid #FFF;border-bottom: 1px solid #fff;}.tb_button.hover {borer:2px outset #def; background-color: #f8f8f8 !important;}.ws_toolbar {z-index:100000} .ws_toolbar .ws_tb_btn {cursor:pointer;border:1px solid #555;padding:3px} .tb_highlight{background-color:yellow} .tb_hide {visibility:hidden} .ws_toolbar img {padding:2px;margin:0px}

审核编辑 hhy

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分