2008-10-27 26 views
38

我的公司正在使用Python進行一個相對簡單的嵌入式項目。在嵌入式平臺上有其他人使用Python嗎?總的來說,它對我們來說很好,快速開發應用程序,快速調試。我喜歡語言的整體「簡潔」。任何使用Python進行嵌入式項目的人?

我在日常工作中唯一真正的問題是缺少靜態檢查與常規編譯器會導致運行時出現問題,例如,一個簡單的意外的字符串cat和一個print語句中的int可能會導致整個應用程序停機。

回答

8

在我以前的僱主中,我曾想花一些時間在構建嵌入式系統tinypy,這是一個「64k代碼中的Python的極簡主義實現」。 (但我從來沒有得到它,我沒有時間了。)

10

順便說一句,請參閱此博客文章:「Type inference for Python」,瞭解類型推斷和靜態類型的有趣討論,包括指向某些Guido van Rossum博客文章的鏈接向Python添加可選的靜態類型。

我同意Bruce Eckel,認爲一個人比依靠強壯的打字練習「強力測試」更好。我認爲這同樣適用於嵌入式開發。

2

我有一個Python服務器(使用Twisted)和XP下運行的嵌入式一些輔助腳本,它一直偉大的工作。

1

是不是EVE Online客戶端實時,高性能的Python的展示?

+1

在線前夕使用了stackless Python語言的另一種實現方式,是不同的,那麼CPython的,他們沒有任何的嵌入式應用,並在EVE宇宙中所有是一個大簇上。 – 2014-04-22 09:05:00

9

就個人而言,我對一些由BusRadio使用的設備上運行的軟件的工作。這是一個基於Twisted和Python構建的嵌入式項目的示例。該設備是嵌入式XScale處理器,運行debian-derived分配,因此它可能不符合「嵌入」的某些定義,但它很小:它適合於校車的儀表板。

在大型庫中使用Python有一些有趣的問題 - 解釋器可能需要很長時間才能啓動並在真正慢的芯片上加載Twisted的所有代碼,有些事情需要特殊情況優化。然而,Python的動態特性決不是問題。問題中的軟件當然並不完美,但至少在使用Twisted時,一個簡單的編程錯誤不會「降低整個應用程序」。回溯將被記錄,並繼續處理。

所以,如果你在嵌入式環境中充分不受約束,你可以在第一時間使用Python是,它沒有比開發「常規」程序(遊戲,桌面應用程序,Web應用程序)不同。你不需要在那裏靜態輸入,你也不需要在這裏。

+0

我想強調在這種情況下使用Twisted的適當性。 – jjmontes 2016-10-07 13:23:49

3

事實上,Python是經常被用來作爲的支持語言',而你需要寫某種試驗 - 即我參與了一個項目,該項目(基於Python)測試框架代碼庫爲(λ是)幾乎一樣與主產品一樣大。 Python'agents'在QNX,VxWorks上工作 - 和我們遇到的大多數問題,都是正確地移植代碼中的線程和網絡相關部分。

可能值得去看看OpenMoko project很多Python的嵌入式開發都是在那裏完成的。

的看點出: - 爲Python/C擴展模塊支持可能會表現得很奇怪依賴於平臺/操作系統 - 大多數的嵌入式平臺提供的Python 相當過時的版本 - 最後你會發現,嵌入式軟件在每個位數都有差別,而在'412Mhz XScale CPU上執行的'現代'嵌入式軟件有128MB以上的差異,然後Python與你想要的硬件不匹配目標:(

3

我們在大學裏使用Python來開發基於Gumstix硬件平臺的嵌入式應用程序雖然比傳統的嵌入式系統更有能力,但我們發現混合了小型功耗低,易於在臺式機和目標硬件之間進行代碼轉換的無價之寶。

Python也是一門偉大的語言來教學生,而Gumstix的優勢在於它們可以獲得低功耗系統的代碼,而不是使用專用語言(如NesC)帶來的頭痛和心碎。

4

唯一真正的問題,我有一天 一天的工作,最後的靜態 檢查VS常規編譯器可以在 運行時拋出 事業的問題,例如一個簡單的意外貓一個字符串的 和打印 聲明int可以帶動整個 申請下來。

單元測試是你唯一的對這些事情的安全。

3

我的團隊寫做出來的C++和Python的嵌入式軟件。我們決定用C++編寫基本類和繁重的計算例程。我們用Python編寫了邏輯。將庫提升爲膠水。使用boost並不容易,但結果非常好。快速和容易修改。使用python來表示客戶需求,我們能夠實時滿足客戶的需求,使用注射工藝改變代碼。真的很刺激! (好的,我是一個極客;)

我們在python中開始原型製作,但是我們突然意識到它顯然太慢了。所以我們決定在不同的計算層上構建程序,以達到速度要求。 C++是最好的解決方案。

爲了一起使用python和C++,我們必須嚴格控制鍵入。

3

我曾經爲一家公司使用過基於Atmel AVR32嵌入式產品並運行嵌入式Linux的嵌入式產品。該固件最初是在PC上開發的(由於缺乏有效的硬件原型),後來轉移到在交叉編譯的Python解釋器上運行的嵌入式硬件。

在設備上調試和修改源代碼的能力是開發過程中的一大優點,並且節省了大量時間。最大的缺點是Python解釋器的速度和內存使用率。

繼首次發佈生產固件之後,我們將關鍵代碼部分移植到C/C++中。移植工作非常簡單,導致對速度要求嚴格的代碼提高了幾個數量級(正如您所期望的那樣)。

令人驚訝的是大多數設計和生產測試代碼都是用Python編寫的,主要運行在PC上的測試工具中。

+1

我可以知道你如何移植到C? Ctypes或python擴展包裝? – foresightyj 2013-03-07 15:31:50

14

我們在相當多的embedded boards with ARM processors和16 MB的RAM(運行Linux)的使用Python。

它的作品真的很好,是很容易使快速定製代碼 - 蟒蛇的優勢之一。至於代碼的可靠性 - 我們嘗試擁有100%的測試覆蓋率。用Python編寫測試非常快,它給你一種美妙的信心。我們使用twisted trial來運行測試並報告覆蓋範圍,但還有很多其他工具可用。

以我的經驗蟒蛇+測試是更可靠和更快比任何其他的替代品來寫。

嵌入式工作的唯一缺點是,有時蟒蛇可能是緩慢,有時它使用了大量的內存(相對而言)。這並沒有導致我們暫停顯示問題,如果Python成爲一個問題,它很容易在速度和內存方面進行配置。

pychecker是一個非常有用的太也將趕上相當多的常見錯誤。

7

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

我還沒有嘗試他們自己,所以我不知道如何Python解釋從PC實現方式中,如其中包括的模塊,RAM和ROM存儲器的限制,執行速度等進行比較或不同

然而,正如用戶foresightyj在評論中指出的那樣,它似乎使用了Python 1.5.x,這是一個真正的古老版本,所以我會很難認真對待它們。 Python開發人員不會喜歡降級到沒有太多現代Python特性的古老版本。我會擔心這個舊版本的安全問題。

+0

這是一種很好的代碼編寫方式,但當您嘗試在該平臺上執行更多操作時會遇到一些性能問題。好的部分是平臺並不昂貴,這非常重要。看到我的問題:http:// stackoverflow。com/questions/7943919 /高效字符串到十六進制函數 – INS 2011-12-24 16:58:55

7

我一直基於老又慢PowerPC和16MB內存工作的微波通信設備。

我已經能夠在VxWorks上移植Python 2.6.1解釋器,以便讓命令行解釋器直接從目標shell可用,或者執行上傳到目標flash的python腳本。

我們使用這些腳本對目標執行自動測試或執行診斷過程。 這裏對整個過程的一些細節:HOW TO: Port Python to VxWorks

-4

塊引用 唯一真正的問題我已經在日常工作,最後靜態檢查VS常規編譯器可能會導致問題在運行時被拋出,例如在打印語句中一個簡單的意外的字符串貓和int可以將整個應用程序關閉

對我而言,這是一筆巨大的交易。在編譯時可以找到的問題現在必須依賴運行時間來解決問題。不知道數據類型,不得不編寫額外的函數來檢查數據類型很麻煩。在C中沒有必要這麼做。你如何在python中聲明'volatile'?

塊引用 嵌入式工作的唯一缺點是,有時蟒可能很慢,有時它使用了大量的存儲器(相對而言)。這並沒有導致我們暫停顯示問題,如果Python成爲一個問題,它很容易在速度和內存方面進行配置。

這也是巨大的。對於嵌入式系統或RTOS時間限制非常重要。

Python不需要快速編碼。這真的取決於你熟悉的語言。老實說,需要1天的時間才能編寫函數和不必要的面向對象的東西,我可以在2小時內完成C語言。 測試非常不方便我必須編寫代碼,py_compile,將pyc複製到目標中然後運行程序,然後python退出抱怨變量未定義或類型轉換錯誤或一些小東西那樣。

我的建議是C工具鏈可用於任何目標。 C是快速,硬件導向,具有挑戰性和樂趣。 C支持嵌入式系統。不需要安裝配置愚蠢的python包來運行它。

3

根據我的經驗,Python傳統上在桌面環境中比嵌入式領域更多地使用Python。有兩個原因,涉及到的事實,Python是解釋:

  • C/C++語言有比Python更高的性能(這是一個緩慢的微控制器的嵌入式系統重要)
  • C/C++語言有更確定的響應時間(這對於實時嵌入式系統來說是非常重要的)。

當然,隨着嵌入式系統將變得更快,上市時間更短,Python將在嵌入式領域被更多的採用。

2

最近的事態發展

  • MicroPython是一個精幹,快速實現優化用於微控制器上運行的Python 3編程語言。
  • 歐洲航天局(ESA)是funding further development of MicroPython。它正在評估這種語言對空間應用的適用性,特別是對有效載荷的適用性。
  • WiPy 1.0 & 2.0,LoPy & SiPy是由Pycom銷售的無線MicroPython平臺。

The WiPy 1.0

-1

我使用Gatetel GT-HE910系列模塊,其嵌入泰利特調制解調器包括3G,GPS,AD,IO和Python 2.7。這用於遠程數據採集應用程序。 Python在這些模塊上很慢,但我們只需要每15分鐘更新一次或在報警條件下更新,以便它們運行良好。

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