任何人使用Python的embedded式项目?
我的公司正在使用Python进行一个相对简单的embedded式项目。 在embedded式平台上有其他人使用Python吗? 总的来说,它对我们来说很好,快速开发应用程序,快速debugging。 我喜欢语言的整体“简洁”。
我在日常工作中唯一真正的问题是缺less静态检查与常规编译器会导致在运行时抛出问题,例如,一个简单的string意外的猫和一个打印语句中的int可以带来整个应用程序下来。
我们在相当多的ARM处理器和16 MB的RAM(运行linux)的embedded式主板中使用python。
它工作得很好,而且很容易快速制作自定义代码 – 这是python的强项之一。
至于代码的可靠性 – 我们尝试有100%的testing覆盖率。 使用Python编写testing非常快,它给你一个很好的自信心。 我们使用扭曲的试验来运行testing并报告覆盖范围,但还有许多其他工具可用。
根据我的经验,python +testing比其他的select更可靠,写得更快。
embedded式工作的唯一缺点是,有时python可能会很慢,有时会使用大量的内存(相对来说)。 这并没有导致我们的显示停止问题,而python是非常容易的速度和内存,如果它成为一个问题。
pychecker也是一个非常有用的也将捕获相当多的常见错误。
顺便说一句,看到这篇博客文章:“ types推理的Python ”一个有趣的types推断和静态types的讨论,包括一些Guido van Rossum博客文章的链接描述添加可选静态types的Python。
我同意布鲁斯·埃克尔 ( Bruce Eckel)的观点,认为比强烈的打字练习更能锻炼“powershell的testing”。 我认为这同样适用于embedded式开发。
就个人而言,我已经使用了BusRadio使用的设备上运行的一些软件。 这是一个基于Twisted和Python的embedded式项目的例子。 该设备是一个embedded式XScale处理器,运行Debian派生的分发版,所以它可能不符合“embedded式”的某些定义,但相当小:它适合于校车的仪表板。
在大型库中使用Python有一些有趣的问题 – 解释器可能需要相当长的时间才能启动并加载Twisted的所有代码到一个非常慢的芯片上,有些事情需要特殊的优化。 但是,Python的dynamic特性决不是一个问题。 有问题的软件当然不是完美的,但至less在使用Twisted时,一个简单的编程错误不会“使整个应用程序失效”。 回溯将被logging,处理继续。
所以,如果你处于一个embedded式的环境中,并且没有任何限制,那么你可以首先使用Python,这与开发“常规”程序(游戏,桌面应用程序,networking应用程序)没有什么两样。 你不需要在那里静态input,你也不需要在这里。
在我以前的雇主中,我曾想花一些时间在tinypy中构buildembedded式系统,这是“在64k代码中对Python的最低限度实现”。 (但我从来没有去过,我也没有时间了。)
我一直在研究基于老式和慢速的powerpc和16Mb的RAM的微波通信设备。
我已经能够在VxWorks上移植Python 2.6.1解释器,以便直接从目标shell获得命令行解释器,或者执行上传到目标flash的python脚本。
我们使用这些脚本对目标执行自动testing或执行诊断程序。 这里整个过程的一些细节: 如何:将Python移植到VxWorks
泰利特使 GSM / GPRS调制解调器模块包含一个embedded式Python解释器 。
我自己也没有尝试过,所以我不知道Python解释器是如何与PC实现进行比较或者不同的,比如包含哪些模块,RAM和ROM的内存限制,执行速度等等。
但是,正如用户在评论中指出的那样,他们似乎使用了Python 1.5.x,这是一个真正的古老版本,所以我很难认真对待它们。 Python开发人员不会喜欢降级到如此古老的版本,没有太多现代的Pythonfunction。 我会担心这个旧版本的安全问题。
我在日常工作中唯一真正的问题是最后的静态检查与常规编译器会导致运行时抛出一些问题,例如一个简单的string意外的猫和一个打印语句中的int可以带来的问题整个应用程序下来。
unit testing是你对这些事情唯一的安全。
事实上,在你需要编写某种testing的时候,Python经常被用作“支持语言”,也就是说,我参与了一个项目,基于Python的testing框架代码库几乎与主要产品。 Python的代理在QNX,VxWorks上工作 – 我们遇到的大多数问题都是正确地移植代码中的线程和networking相关部分。
看看OpenMoko项目可能是值得的,很多Python的embedded式开发都是在那里完成的。
注意事项: – 根据平台/操作系统的不同,对Python / C扩展模块的支持可能会非常奇怪 – 大多数embedded式平台都提供了相当过时的Python版本 – 最后你会发现“正确的'embedded式软件,每个位数都计算在内,而'现代'embedded式软件是在> 412Mhz的XScale CPU上执行的,而128MB以上,然后Python只是不匹配你想要的硬件:(
我们在大学使用Python来开发基于Gumstix硬件平台的embedded式应用程序。 虽然比传统的embedded式系统更有能力,但是我们发现,小型,低功耗以及在台式机和目标硬件之间的代码传输的简易性是非常宝贵的。
Python也是一门伟大的语言来教给学生,而Gumstix的优点是他们可以在低功耗的系统上运行代码,而不是使用NesC等专用语言的头痛和心碎。
我的团队编写了一个由C ++和Python构成的embedded式软件。 我们决定用C ++编写基本类和繁重的计算例程。 我们用Python编写了逻辑。 提高库作为胶水。 使用提升是不容易的,但结果是非常好的。 快速和容易修改。 使用python来表示客户需求,我们能够实时满足客户的需求,使用注入工艺来改变代码。 真的很刺激! (好吧,我是个怪胎;)
我们开始使用python进行原型devise,但是我们突然意识到这显然太慢了。 所以我们决定在不同的计算层上构build程序,以达到速度要求。 C ++是最好的解决scheme。
为了一起使用python和c ++,我们必须严格控制input。
我曾经为一家公司使用Python,基于Atmel AVR32embedded式产品,运行embedded式Linux。 固件最初是在个人电脑上开发的(由于缺乏有效的硬件原型),后来转移到交叉编译的Python解释器上运行的embedded式硬件。
在设备上debugging和修改源代码的能力在开发过程中是一个很大的优势,并且节省了大量的时间。 最大的缺点是Python解释器的速度和内存使用率。
在生产固件的第一个版本之后,我们将关键代码部分移植到C / C ++中。 移植工作非常简单,导致对速度要求严格的代码有几个数量级的提高(正如您所期望的那样)。
在devise和生产testing代码中,大部分是用Python编写的,主要运行在PC上的testing工具上。
根据我的经验,Python在桌面环境中传统上使用的比在embedded式领域更多。 有两个原因,与Python被解释的事实有关:
- C / C ++语言比Python具有更高的性能(这对于具有慢速微控制器的embedded式系统来说非常重要)
- C / C ++语言有更多确定性的响应时间(这在实时embedded式系统中是很重要的)。
当然,随着embedded式系统的上市时间缩短,Python在embedded式领域的应用也将越来越多。
我有一个Python服务器(使用Twisted )和一些帮助脚本在XP Embedded下运行,并且工作得很好。
最近的发展
- MicroPython是Python 3编程语言的精简和快速实现,经过优化,可在微控制器上运行。
- 欧洲航天局(ESA)正在资助MicroPython的进一步发展 。 正在这样做是为了评估语言对天基应用的适用性,特别是有效载荷。
- WiPy 1.0&2.0,LoPy&SiPy是由Pycom出售的无线MicroPython平台。
EVE Online客户端不是实时的高性能Python的展示吗?
我正在使用embeddedTelit调制解调器,包括3G,GPS,AD,IO和Python 2.7的Gatetel GT-HE910系列模块。 这用于远程数据采集应用程序。 Python在这些模块上的速度很慢,但是我们只需要每15分钟更新一次或在报警状态下进行更新,这样就可以很好地工作。
Blockquote我在日常工作中遇到的唯一真正的问题是静态检查与普通编译器的最后一个会导致运行时抛出问题,例如一个简单的意外的stringcat和一个print语句中的int把整个应用程序closures
对我来说这是一笔巨额的交易。 在编译时可以find的问题现在必须依靠运行时间来解决问题。 不知道数据types,不得不编写额外的函数来检查数据types是麻烦的。 在C中没有必要这么做。你如何在python中声明'volatile'?
Blockquoteembedded式工作的唯一缺点是,有时python可能会很慢,有时会使用大量的内存(相对来说)。 这并没有导致我们的显示停止的问题,而python是非常容易的速度和内存分析,如果它成为一个问题。
这也是巨大的。 对于embedded式系统或RTOS时间约束非常重要。
Python不需要快速编码。 这真的取决于你所熟悉的语言。 老实说,我花了1天的时间来编写函数和不必要的面向对象的东西,我可以在2小时内做C语言。testing非常不方便我必须编写代码,py_compile,将pyc复制到目标文件中,然后运行程序,然后python退出抱怨variables没有定义或types转换错误或一些小东西这样的。
我的build议是C工具链可用于任何目标。 C是快速,硬件导向,具有挑战性和乐趣。 坚持与C为embedded式系统。 不需要安assembly置愚蠢的python包来运行它。