有人使用Python进行嵌入式项目吗?

时间:2008-10-27 18:41:02

标签: python embedded

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

我日常工作中唯一真正的问题是缺少静态检查而不是常规编译器会导致在运行时抛出问题,例如:一个字符串的简单意外cat和print语句中的int可以使整个应用程序失效。

17 个答案:

答案 0 :(得分:14)

我们在很多embedded boards with ARM processors和16 MB RAM(运行linux)中使用python。

它工作得很好,很容易快速制作自定义代码 - 这是python的优点之一。

至于代码的可靠性 - 我们试图获得100%的测试覆盖率。用python编写测试非常快,它给你一种美妙的信心。我们使用twisted trial来运行测试并报告覆盖率,但还有许多其他可用工具。

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

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

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

答案 1 :(得分:10)

BTW,请参阅此博客文章:“Type inference for Python”,了解有关类型推断和静态类型的有趣讨论,包括指向一些Guido van Rossum博客文章的链接,其中描述了向Python添加可选的静态类型。

我同意Bruce Eckel一个人更善于练习“强力测试”,而不是依靠强力打字。我认为这同样适用于嵌入式开发。

答案 2 :(得分:9)

就个人而言,我已经研究了BusRadio使用的设备中运行的某些软件。这是基于Twisted和Python构建的嵌入式项目的一个示例。该设备是一个运行XScale分布的嵌入式debian-derived处理器,因此可能无法满足“嵌入式”的某些定义,但它非常小:它适合校车的仪表板。 / p>

使用Python和大型库有一些有趣的问题 - 解释器可能需要很长时间才能启动并在非常慢的芯片上加载Twisted的所有代码,有些东西需要特殊情况优化。但是,Python的动态特性决不是问题。有问题的软件肯定不是很完美,但至少在使用Twisted时,一个简单的编程错误不会“使整个应用程序失效”。将记录回溯,并继续处理。

因此,如果您处于一个完全不受限制的嵌入式环境中,您可以首先使用Python,那么它与开发“常规”程序(游戏,桌面应用程序,Web应用程序)没有什么不同。你不需要静态输入,你也不需要它。

答案 3 :(得分:8)

Telit使GSM/GPRS modem modules包含embedded Python interpreter

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

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

答案 4 :(得分:8)

在我以前的雇主那里,我想花一些时间在tinypy中构建嵌入式系统,这是“64k代码中的Python的极简主义实现”。 (但我从来没有这样做,我也没有时间。)

答案 5 :(得分:7)

我一直致力于基于旧的和慢速powerpc以及16Mb RAM的微波通信设备。

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

我们使用这些脚本在目标上执行自动测试或执行诊断程序。 这里有一些关于整个过程的细节:HOW TO: Port Python to VxWorks

答案 6 :(得分:4)

  

我白天唯一真正的问题   白天的工作是最后的静态   检查vs常规编译器可以   导致问题被抛出   运行时,例如一只简单的偶然猫   字符串和打印中的int   声明可以带来整体   申请下来。

单位测试是对这些事情的唯一安全措施。

答案 7 :(得分:3)

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

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

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

答案 8 :(得分:3)

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

  • C / C ++语言比Python具有更高的性能(这对于使用慢速微控制器的嵌入式系统非常重要)
  • C / C ++语言具有更多确定性的响应时间(这对于控制某些内容的实时嵌入式系统非常重要。)

当然,随着嵌入式系统变得更快,产品上市时间缩短,Python将更多地应用于嵌入式领域。

答案 9 :(得分:3)

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

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

在首次发布生产固件后,我们将关键的代码段移植到C / C ++。移植工作非常简单,并且在速度关键代码上有了几个数量级的改进(正如您所期望的那样)。

很多设计和生产测试代码都是用Python编写的,主要是在PC上的测试工具中运行。

答案 10 :(得分:3)

我们在大学使用Python,用于基于Gumstix硬件平台的嵌入式应用程序。虽然比传统嵌入式系统更强大,但我们发现小型,低功耗和在桌面计算机上的开发和目标硬件之间传输代码的难易程度非常宝贵。

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

答案 11 :(得分:3)

事实上,Python经常被用作“支持语言”,而你需要编写某种测试 - 即我参与了一个项目,这个(基于Python的)测试框架代码库(是?)几乎一样大作为主要产品的。 Python'代理'适用于QNX,VxWorks - 我们遇到的大多数问题都是正确地移植代码中的线程和网络相关部分。

可能值得一看OpenMoko project在Python中进行了很多嵌入式开发。

要注意的事项: - 根据平台/操作系统的不同,对Python / C扩展模块的支持可能会非常奇怪 - 大多数嵌入式平台都提供了过时的Python版本 - 最后你会发现,每个位都有的'正确'嵌入式软件与在> 412Mhz XScale CPU上运行的'现代'嵌入式软件之间存在差异,然后Python就不行了匹配您要定位的硬件:(

答案 12 :(得分:2)

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

答案 13 :(得分:2)

近期发展

  • MicroPython是一种精简而快速的Python 3编程语言实现,可以在微控制器上运行。
  • 欧洲航天局(ESA)是funding further development of MicroPython。它正在这样做,以评估语言是否适用于基于空间的应用程序,特别是有效载荷。
  • WiPy 1.0& 2.0,LoPy& SiPy 是由Pycom销售的无线MicroPython平台。

The WiPy 1.0

答案 14 :(得分:1)

EVE Online客户端不是实时,高性能Python的一个展示吗?

答案 15 :(得分:-1)

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

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

答案 16 :(得分:-4)

  

块引用   我在日常工作中唯一真正的问题是,静态检查与常规编译器的最后一次操作可能会导致在运行时抛出问题,例如:一个字符串的简单意外cat和print语句中的int可以使整个应用程序失效

对我来说,这是一笔巨大的交易。您可以在编译时找到并解决问题的问题现在必须依赖于运行时。不知道数据类型并且只是为了检查数据类型而必须编写附加功能是麻烦的。在C语言中没有必要这样做。你会如何在python中声明'volatile'?

  

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

这也很大。对于嵌入式系统或RTOS时间约束非常重要。

Python没有必要快速编写代码。这真的取决于你习惯的语言。老实说,我需要1天的时间来编写函数和不必要的面向对象的东西,我可以在2小时内完成。 测试是如此不方便我必须编写代码,py_compile,在目标中复制pyc然后运行程序,然后python退出未定义的抱怨变量或类型转换错误或类似的小事。

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