0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MicroPython 在嵌入式开发中的兴起

陈韵瑄 2023-01-04 11:17 次阅读

换岗: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),此外,它还被移植到其他架构,如 ESP8266ESP32、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

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

    关注

    5068

    文章

    19014

    浏览量

    303230
  • python
    +关注

    关注

    56

    文章

    4782

    浏览量

    84449
收藏 人收藏

    评论

    相关推荐

    零基础嵌入式开发学习路线

    嵌入式开发”没有接触过的同学可能会不明觉厉,但是只要你了解了,感兴趣并且有一个正确的学习路线的话,零基础也能入门。给大家介绍一个简单易懂的学习路线,让你能够从零开始学习嵌入式开发。 第一步:掌握
    发表于 10-25 15:55

    嵌入式开发常见问题排查

    嵌入式开发问题排查很多人认为嵌入式开发很难,主要是因为在这个过程中常常会遇到各式各样的问题。这些问题的复杂性和多样性使得许多人感到困惑和无所适从。然而,如果将这些问题逐一拆解,实际上大部分都可以
    的头像 发表于 09-22 08:04 266次阅读
    <b class='flag-5'>嵌入式开发</b>常见问题排查

    恩智浦加速嵌入式AI创新应用开发

    AI应用飞速发展的今天,如何能够将AI与嵌入式系统开发有机结合起来,营造新的开发生态,打造与众不同的创新用例,一直是嵌入式开发者追求的目标
    的头像 发表于 08-27 09:46 790次阅读

    聚焦嵌入式开发的合规性工具、项目管理工具、版本迭代工具应用

    ,就嵌入式开发与管理领域的最新趋势、工具选择以及DevSecOps实践应用等方面展开了深入探讨。 本期对话龙智资深DevSecOps顾问徐晨晖, 分享嵌入式开发的合规性工具、项目管理和版本管理的工具选择,以及DevSecOps
    的头像 发表于 07-29 15:15 475次阅读

    嵌入式开发前景怎么样?

    嵌入式开发前景非常广阔,这主要得益于物联网、人工智能、大数据等技术的快速发展,以及嵌入式系统各个领域的广泛应用。以下是对嵌入式开发前景的详细分析
    的头像 发表于 07-10 09:00 2499次阅读
    <b class='flag-5'>嵌入式开发</b>前景怎么样?

    嵌入式开发者的未来

    嵌入式系统的就业方向非常广泛,涵盖了许多不同的行业和领域。以下是一些常见的嵌入式系统就业方向:消费电子产品:这包括智能手机、平板电脑、智能电视、智能家居设备等。嵌入式系统工程师可以参与设计、
    的头像 发表于 06-23 08:10 328次阅读
    <b class='flag-5'>嵌入式开发</b>者的未来

    嵌入式开发就业前景怎么样?

    智能家居领域,嵌入式开发的主要工作是开发各种智能化设备和系统,如智能照明、智能安防、智能家电等。嵌入式开发人员需要掌握相关的硬件和软件技术,如处理器、传感器、通信技术、操作系统等,
    发表于 06-07 14:51

    ARM Cortex-A53嵌入式开发平台Android手册

    电子发烧友网站提供《ARM Cortex-A53嵌入式开发平台Android手册.pdf》资料免费下载
    发表于 04-28 15:10 0次下载

    fpga是嵌入式开发

    FPGA(现场可编程门阵列)与嵌入式开发之间确实存在一定的关联,但它们本质上是两个不同的领域。
    的头像 发表于 03-15 14:18 979次阅读

    嵌入式软件开发和软件开发的区别

    嵌入式软件开发和软件开发是两个不同的概念,它们一些关键方面有着明显的区别。嵌入式软件开发是指
    的头像 发表于 01-22 15:27 2167次阅读

    嵌入式开发常见的C语言技巧与方法分享

    嵌入式开发,常常要操作寄存器,对寄存器进行写入,读出等等操作。每个寄存器都有自己固有的地址,通过C语言访问这些地址就变得尤为重要。
    的头像 发表于 12-26 09:55 1056次阅读

    嵌入式开发学习的十三法则分享

    嵌入式开发学习是一个不断积累和总结的过程,来自一个嵌入式开发高级工程师为我们总结的关于嵌入式开发学习的十三法则,大家不妨参考一下: 一、冗余度法则
    发表于 12-21 06:32

    嵌入式开发C语言中的uint8_t科普

    嵌入式开发的C语言代码,经常可以看到类似uint8_t、uint16_t、uint32_t、uint64_t这种数据类型,在教材却从
    的头像 发表于 12-13 16:30 6616次阅读
    <b class='flag-5'>嵌入式开发</b>C语言中的uint8_t科普

    嵌入式开发的交叉编译详解

    嵌入式开发,经常会遇到目标平台资源贫乏,无法运行需要的编译器。亦或是目标平台上不允许或不能够安装需要的编译器。这时候就需要使用交叉编译了。
    的头像 发表于 12-01 13:24 1153次阅读
    <b class='flag-5'>嵌入式开发</b><b class='flag-5'>中</b>的交叉编译详解

    嵌入式开发为什么需要输出调试信息?

    嵌入式开发为什么需要输出调试信息? 因为输出调试信息是嵌入式开发中一项非常重要的实践,它有助于保证软件的可靠性、稳定性和性能,也是故障排查的关键工具之一。 嵌入式开发输出调试信息主要有以下
    发表于 11-28 16:46