41

我的公司正在将 Python 用于一个相对简单的嵌入式项目。还有其他人在嵌入式平台上使用 Python 吗?总的来说,它对我们来说效果很好,可以快速开发应用程序,快速调试。我喜欢这种语言的整体“简洁”。

我在日常工作中遇到的唯一真正问题是,与常规编译器相比,缺少静态检查可能会导致在运行时引发问题,例如一个简单的字符串 cat 和 print 语句中的 int 可能会带来整个应用程序下来。

4

17 回答 17

16

我们在很多带有 ARM 处理器和 16 MB RAM(运行 linux)的嵌入式板上使用 python。

它工作得非常好,并且非常容易快速制作自定义代码 - 这是 python 的强项之一。

至于代码的可靠性——我们试图有 100% 的测试覆盖率。用 python 编写测试非常快,它会给你一种美妙的自信感。我们使用扭曲试验来运行测试并报告覆盖率,但还有许多其他工具可用。

以我的经验,python + 测试比任何其他替代方案更可靠且编写速度更快。

嵌入式工作的唯一缺点是有时 python 可能很慢,有时它使用大量内存(相对而言)。这还没有给我们造成显示停止问题,如果它成为问题,python 很容易分析速度和内存。

pychecker也非常有用,它可以捕获很多常见错误。

于 2009-09-22T12:47:28.990 回答
10

顺便说一句,有关类型推断和静态类型的有趣讨论,请参阅这篇博客文章:“ Python的类型推断”,包括一些 Guido van Rossum 博客文章的链接,这些文章描述了向 Python 添加可选的静态类型。

我同意Bruce Eckel的观点,即练习“强测试”比依赖强类型更好。我认为这同样适用于嵌入式开发。

于 2008-10-27T19:51:43.087 回答
9

Personally, I've worked on some of the software that runs in the device used by BusRadio. It's an example of an embedded project built on Twisted and Python. The device is an embedded XScale processor running a debian-derived distribution, so it might not meet certain definitions of "embedded", but it is pretty dang small: it fits into the dashboard of a school bus.

There were some interesting issues with using Python with large libraries - the interpreter can take quite a while to start up and load all the code for Twisted on a really slow chip, and some things needed special-case optimizations. However, at no point was the dynamic nature of Python a problem. The software in question certainly wasn't perfect, but at least when using Twisted, a simple programming error will not "bring the whole application down". A traceback will get logged, and processing continues.

So, if you're in an embedded environment sufficiently unconstrained that you can use Python in the first place, it's no different than developing "regular" programs (games, desktop applications, web apps). You don't need static typing there, and you don't need it here either.

于 2008-10-28T02:42:01.697 回答
8

Telit制作的GSM/GPRS 调制解调器模块包括嵌入式 Python 解释器

我自己没有尝试过,所以我不知道 Python 解释器与 PC 实现的比较或不同之处,例如其中包括模块、RAM 和 ROM 内存限制、执行速度等。

然而,正如用户 foresightyj 在评论中指出的那样,他们似乎使用的是 Python 1.5.x,这是一个真正古老的版本,所以我很难认真对待它们。如果没有这么多现代 Python 特性,Python 开发人员不会喜欢降级到如此古老的版本。我会担心这样一个旧版本的安全问题。

于 2010-09-16T01:31:30.290 回答
8

在我以前的雇主,我曾想花一些时间在tinypy中构建嵌入式系统,这是“64k 代码中 Python 的极简实现”。(但我从来没有得到它,我不再有时间。)

于 2008-10-27T19:45:21.477 回答
7

我一直在研究基于旧的慢速 powerpc 和 16Mb RAM 的微波电信设备。

我已经能够在 VxWorks 上移植 Python 2.6.1 解释器,以便直接从目标 shell 获得命令行解释器,或者执行上传到目标 flash 的 python 脚本。

我们使用这些脚本对目标执行自动测试或执行诊断程序。这里有一些关于整个过程的细节:如何:将 Python 移植到 VxWorks

于 2010-11-24T16:15:08.413 回答
4

The only real problem I have in day to day work is that the last of static checking vs a regular compiler can cause problems to be thrown at run-time, e.g. a simple accidental cat of a string and an int in a print statement can bring the whole application down.

Unit tests are your only safety against these things.

于 2008-11-10T16:50:23.287 回答
3

我的团队编写了一个由 C++ 和 Python 组成的嵌入式软件。我们决定用 C++ 编写基本类和繁重的计算例程。我们用 Python 编写逻辑。将库提升为胶水。使用 boost 绝非易事,但结果非常好。快速且易于修改。使用python表示自定义需求,我们能够实时满足客户的需求,使用注入技术更改代码。真的很令人兴奋!(好吧,我是个极客;)

我们开始在 python 中进行原型设计,但我们突然意识到它显然太慢了。所以我们决定在不同的计算层中构建程序,以达到速度要求。C++ 是最好的解决方案。

为了同时使用 python 和 c++,我们必须严格控制输入。

于 2009-01-31T00:23:45.620 回答
3

事实上,当您需要编写某种测试时,Python 经常被用作“支持语言”——即我参与了一个项目,该项目(基于 Python 的)测试框架代码库(是?)几乎和主要产品。Python“代理”在 QNX、VxWorks 上工作——我们遇到的大多数问题是正确移植我们代码的线程和网络相关部分。

可能值得看一看OpenMoko 项目,很多 Python 嵌入式开发都是在那里完成的。

需要注意的事项: - 根据平台/操作系统,对 Python/C 扩展模块的支持可能会表现得很奇怪 - 大多数嵌入式平台都提供了相当过时的 Python 版本 - 最后你会发现'proper ' 每一位都很重要的嵌入式软件,以及在大于 128MB 的 >412Mhz XScale CPU 上执行的“现代”嵌入式软件,然后 Python 与您想要定位的硬件不匹配:(

于 2008-10-28T08:57:19.570 回答
3

我们在大学里将 Python 用于基于 Gumstix 硬件平台的嵌入式应用程序。虽然比传统的嵌入式系统功能更强大,但我们发现小尺寸、低(ish)功耗以及在桌面机器上的开发和目标硬件之间轻松传输代码的组合非常宝贵。

Python 也是一种很好的教授学生的语言,并且使用 Gumstix 非常棒,他们可以让代码在低功耗系统上运行,而不是使用 NesC 等专用语言带来的头痛和心碎。

于 2008-11-10T16:44:21.863 回答
3

我曾在一家公司工作,该公司在基于 Atmel AVR32 并运行嵌入式 Linux 的嵌入式产品上使用 Python。固件最初是在 PC 上开发的(由于缺乏可工作的硬件原型),然后转移到在交叉编译的 Python 解释器上运行的嵌入式硬件。

在设备上“实时”调试和修改源代码的能力是开发过程中的一大优势,并节省了大量时间。最大的缺点是 Python 解释器的速度和内存使用。

在生产固件的第一个版本发布后,我们将代码的关键部分移植到 C/C++。移植工作非常简单,并导致速度关键代码的改进了几个数量级(如您所料)。

顺便说一句,大多数设计和生产测试代码都是用 Python 编写的,主要在 PC 上的测试工具中运行。

于 2009-09-22T06:05:29.390 回答
3

根据我的经验,Python 传统上在桌面环境中的使用多于在嵌入式领域。有两个原因与解释 Python 的事实有关:

  • C/C++ 语言比 Python 具有更高的性能(这在具有慢速微控制器的嵌入式系统中很重要)
  • C/C++ 语言具有更多确定性的响应时间(这在控制某些东西的实时嵌入式系统中很重要)。

当然,随着嵌入式系统将变得更快、上市时间更短,Python 将在嵌入式领域得到更多采用。

于 2014-09-30T14:06:28.593 回答
2

我有一个 Python 服务器(使用Twisted)和一些在 XP Embedded 下运行的帮助脚本,它运行良好。

于 2008-10-27T19:57:43.167 回答
2

最近的发展

  • MicroPython是 Python 3 编程语言的精简和快速实现,经过优化可在微控制器上运行。
  • 欧洲航天局 (ESA) 正在资助 MicroPython 的进一步开发。它这样做是为了评估该语言对天基应用的适用性,特别是对有效载荷的适用性。
  • WiPy 1.0 和 2.0、LoPy 和 SiPy是 Pycom 销售的无线 MicroPython平台

WiPy 1.0

于 2015-07-07T20:42:15.767 回答
1

EVE Online客户端不是实时、高性能 Python 的展示品吗?

于 2008-10-27T20:08:29.183 回答
-1

我正在使用一个 Gatetel GT-HE910 系列模块,它嵌入了 Telit 调制解调器,包括 3G、GPS、AD、IO 和 Python 2.7。这用于远程数据采集应用程序。Python 在这些模块上的速度非常慢,但我们只需要每 15 分钟更新一次或处于警报状态,因此它们运行良好。

http://www.gatetel.com/#!gt-series/cscb

于 2015-10-02T04:09:08.657 回答
-5

Blockquote 我在日常工作中遇到的唯一真正问题是静态检查与常规编译器的最后一个问题可能会导致在运行时引发问题,例如,一个简单的意外 cat 字符串和 print 语句中的 int 可以降低整个应用程序

对我来说,这是一笔大买卖。您可以在编译时发现并修复问题现在必须在运行时依赖。不知道数据类型并且必须编写额外的函数来检查数据类型是很麻烦的。在 C 中没有必要这样做。你将如何在 python 中声明'volatile'?

Blockquote 嵌入式工作的唯一缺点是有时 python 可能很慢,有时它使用大量内存(相对而言)。这还没有给我们造成显示停止问题,如果它成为问题,python 很容易分析速度和内存。

这也是巨大的。对于嵌入式系统或 RTOS,时间限制非常重要。

Python不需要快速编码。这实际上取决于您对哪种语言感到满意。老实说,我需要 1 天的时间来编写函数和不必要的面向对象的东西,我可以在 2 小时内用 C 完成。测试太不方便了,我必须编写代码,py_compile,在目标中复制 pyc,然后运行程序,然后 python 退出抱怨变量未定义或类型转换错误或类似的小事。

我的建议是 C 工具链可用于任何目标。C 是快速的、面向硬件的、具有挑战性的和有趣的。在嵌入式系统中坚持使用 C。无需安装 configure silly python 包来运行它。

于 2014-09-19T18:41:22.257 回答