STM32
直播中

风来吴山

8年用户 1429经验值
擅长:电源/新能源
私信 关注
[问答]

Python在实时嵌入式系统开发中有何作用

如何用Python语言去控制单片机呢?
Python在实时嵌入式系统开发中有何作用?

回帖(1)

刘雅真

2021-11-10 15:00:59
  说到 Python用于硬件开发。很多人可能想到的是树莓派等支持 linux 系统的(树莓派和 Arduino 应用 Python 的的例子实在是多,比如,利用 Raspberry Pi 的硬件和 Python 语言来完成一个机器人制作。),然而现在 Python 已经完全可以脱离系统,直接进行单片机的开发了。
  用 Python 语言控制单片机
  MicroPython 是在单片机上可以跑的 Python,你可以通过 Python 脚本语言开发单片机程序。MicroPython 基于 ANSI C,语法跟 Pyton 3 基本一致,拥有自家的解析器、编译器、虚拟机和类库等。目前它支持基于 32-bit 的 ARM 处理器,比如 STM32F405、STM32f407 等,也就是说 ARM 处理器 STM32F405 上直接可运行 Python 语言,用 Python 语言来控制单片机。
  借助 Micro Python,用户完全可以通过 Python 脚本语言实现硬件底层的访问和控制,比如说控制 LED 灯泡、LCD 显示器、读取电压、控制电机、访问 SD 卡等。
  下面这篇美国 EDN 发布的文章,介绍了 Python 在实时嵌入式系统中扮演的角色:Python‘s role in developing real time embedded systems。
  Python 具有良好的跨平台性,比如 Linux 和 Windows,或是诸如 Raspberry Pi 等单板计算机。不过,随着 Python 的日益普及,人们可能会问,在实时嵌入式系统中是否也有 Python 的一席之地。答案是肯定的。下面是开发人员发现 Python 在实时嵌入式系统开发中有可能扮演的五个主要角色。
  作用# 1 设备调试和控制
  在嵌入式软件开发过程中,开发人员常常需要分析总线通信量,如 USB、SPI 或 I2C。有的分析仅仅是出于调试目的,但有时则需要控制总线分析仪并发送信息至嵌入式系统。许多总线分析仪和通信工具都有友好的用户接口,可以用来控制工具。他们通常还提供一种方法来开发脚本,也可以用来控制工具。Python 是一种普遍支持的脚本语言,有时则是一些工具的接口,或是用来控制工具。
  作用# 2–自动化测试
  通过 Python 控制工具在嵌入式系统中发送和接收消息的能力,使得利用 Python 构建自动化测试(包括回归测试)成为可能。Python 脚本可以设置嵌入式系统进入不同的状态,设置配置文件,并测试所有可能的干扰以及系统与外部环境的相互作用。使用 Python 开发自动化测试的好处是,回归测试可以开发持续测试并训练系统。任何的代码变动导致的 bug 或不合格的结果都将被实时的检测出来。
  作用# 3–数据分析
  通过 Web 简单地搜索 Python 库,你会发现,有许多免费强大的 Python 库都可以用来开发应用程序。Python 可以用来接收非常重要的嵌入式系统数据,然后存储到数据库或是本地进行分析。开发者还可以使用 Python 开发实时可视化功能来展现临界参数,或是存储这些参数用于后续分析。使用 Python 进行数据分析的优点之一是当基础性工作完成之后,新功能的植入会显得比较简单。
  作用# 4–实时软件
  Python 已经证实了自己的强大性和易使用性,甚至发现它是作为一门编程语言进入实时嵌入式系统。是的,嵌入式软件本身就是用 Python 写的而不是 C/C++。用于实时软件最广泛的 Python 版本是 MicroPython,大多是设计在 ARM Cortex-M3/4 微控制器上运行。MicroPython 并不孤立。Synapse 和 OpenMV 公司在嵌入式系统中既使用 MicroPython 也使用他们自己的 Python port。对 MicroPython 感兴趣的读者可能对 DesignNews(EDN 的姐妹机构)的继续教育课程也感兴趣。
  作用# 5–学习面向对象编程
  Python 是一门免费的编程语言,可以跨多个平台使用,对于学生和非编程人员而言比较简单。该语言与 C 语言不同,它也是现代式的,并且可以在自由形态的脚本类型中结构化,或是作为一个复杂的面向对象的体系结构。Python 本身也很灵活。甚至还有这种情景:没有编程经验的电气工程师可以利用 Python 写出有用的测试脚本或用最少的时间实施电板检查。
  Python 的学习曲线并不陡峭,熟悉 Python 学习曲线的开发人员发现,当你有了其它语言的基础之后,学习 Python 比学习任意其他的编程语言都要简单。出于这些原因,当开发人员看到 Python 扮演着编程孵化器角色,并吸收其它缺乏经验的工程师对宜早不宜迟的设计周期做出贡献时,不应该感到惊讶。
  什么?Python+FPGA!?
  夏宇闻老师几个月前在微信上推荐了一个帖子,说的是有人用 Digilent 的 PYNQ-Z1 板卡实现了超强的加速性能。
  早年,关于 FPGA 的开发都是基于硬件描述语言,从开始的 VHDL 到现在更为流行的 Verilog,软件应用也从由最开始的汇编语言发展到现在的 c/c++实现,这些都是目前为大多数 FPGA 开发者所熟悉的 FPGA 发展路程。上个月,IEEE 收录了一篇关于使用 Python 开发 FPGA 应用的论文。
  在美国纳帕举行的第 25 届关于可编程计算机器领域 IEEE 国际讨论会上,一篇名为“评估通过 Python 快速开发异构处理器 FPGA 应用性能”的短篇论文获得了最佳短篇论文奖。这篇论文主要讨论了 Python 开发 FPGA 应用的优势和效率,论文中针对 Digilent 的 PYNQ-Z1 板卡(内部集成一个 Xilinx Zynq SoC),通过支持 Python 编程和 Jupyter Notebooks 框架的 PYNQ 开发环境,应用 Python 对此板卡进行开发编程,并最终评估开发结果的优势和效率。值得一提的是,发表这篇论文的作者都是业界大佬,包括高级计算机科学家 AndrewG.Schmidt、计算机科学家 Gabriel Weise 以及来自美国南加州大学工程技术科学协会的研究室主任 Matthew French。在论文中,Matthew French 教授主要就利用 PYNQ 开发环境,应用 Python 语言对 Xilinx Zynq 器件进行编程应用开发时对 FPGA 器件的影响、性能结果以及瓶颈影响进行了评估。此外,各位教授就基于 Python 的开发结果与已经存在的基于 C 语言的开发及手动开发结果进行了比较分析。
  在论文中,各位教授还对 PYNQ 开发环境的优缺点进行了阐述:
  首先来说,PYNQ 应用开发框架是一个开源的开发环境,提供了标准的可以约束芯片 I/O 引脚的”Overlay”比特流,同时,开发人员可以在此开发环境中,利用 Python 对 FPGA 进行快速编程开发。此外,PYNQ 开发环境内部集成标准的编程范式,支持 HDMI 和视频流的输出输出,同时具有两组 12pin 的 PMOD 连接器和一个兼容 Arduino 的连接器(可以连接或配置为 Arduino 系列板卡)。其中,默认的 overlay 中实例化了多个可以驱动多 I/O 接口的微 Blaze 处理器核,也可以配置一些支持图像滤波功能和试验 SIMT(单指令,多线程)编程软逻辑 GPU 的 overlay。同时,PYNQ 也提供了支持比特流编程的 API 和可扩展的通用 Python 库和包,并且可以通过存储映射 I/O(MMIO)直接寻址可编程逻辑单元,另外还支持 DMA 交易(不需要经过器件驱动和核模块之间的不断握手确认)。
  其次,就目前来说,PYNQ 还不支持任何高级的综合,也无法将 Python 应用直接移植到 FPGA 中。这就意味着,开发者依然原型必须使用 FPGA 来创建一个设计,即当 PYNQ 提供一个支持板卡 IO 接口的 Overlay 框架以时,任何用户逻辑依然必须由开发者亲自创建并综合。不过,开发者仍然可以使用高级综合工具或上面提到的 Python-to-HDL 工程来完成这个任务,但是最终,开发者依然需要基于此设计并创建一个整合了 Python 代码比特流文件。
  也正是由于 PYNQ 存在这方面的缺陷,论文的作者并没有简单依赖现存的 PYNQ API 接口和 overlay,他们开发出一个基于 Redsharc 项目的特定应用程序内核进行研究。
  结果如何呢?论文最后,作者对给出了 Python 开发 Zynq 应用的各项评估结果。结果中给出了通过 c/c++实现这项研究的一般图像处理管道性能,以及定制的硬件加速器和 Python 实现的性能结果(下图所示),帮助我们更好地理解了 Python + FPGA 开发环境的性能和能。表中可以看出,结果十分明显,通过 PYNQ 实现较 c 实现速度提高了 30 倍之多,更甚者,从结果中可以看出,当 Python 实现时有更加有效的可用库时,比如 OpenCV,其性能可以增长更多。
  Python 软件实现和 FPGA 性能潜力的结合是一个非常有意义的工作,将会开创出一个类似于树莓派和 Arduino 的广大的开发者社区。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分