早年,,雖然Python是一款比較容易上手的腳本語言,而且有強大的社區(qū)支持,,一些非計算機專業(yè)領(lǐng)域的人都選它作為入門語言,。遺憾的是,它不能實現(xiàn)一些非常底層的操控,,所以在硬件領(lǐng)域并不起眼,。
然而今時不同往日!
硬件圈同樣非常關(guān)注Python!
說到Python用于硬件開發(fā)。很多人可能想到的是樹莓派等支持linux系統(tǒng)的(樹莓派和Arduino應(yīng)用Python的的例子實在是多,比如,,利用Raspberry Pi的硬件和Python語言來完成一個機器人制作,。),然而現(xiàn)在Python已經(jīng)完全可以脫離系統(tǒng),,直接進行單片機的開發(fā)了,。
用Python語言控制單片機
MicroPython是在單片機上可以跑的Python,你可以通過Python腳本語言開發(fā)單片機程序,。MicroPython基于ANSI C,語法跟Pyton 3基本一致,,擁有自家的解析器,、編譯器、虛擬機和類庫等,。目前它支持基于32-bit的ARM處理器,,比如STM32F405、STM32f407等,,也就是說ARM處理器STM32F405上直接可運行Python語言,,用Python語言來控制單片機。
借助Micro Python,,用戶完全可以通過Python腳本語言實現(xiàn)硬件底層的訪問和控制,,比如說控制LED燈泡、LCD顯示器,、讀取電壓,、控制電機、訪問SD卡等,。
下面這篇美國EDN發(fā)布的文章,,介紹了Python在實時嵌入式系統(tǒng)中扮演的角色:Python's role in developing real time embedded systems。
Python具有良好的跨平臺性,,比如Linux和Windows,,或是諸如Raspberry Pi等單板計算機。不過,,隨著Python的日益普及,,人們可能會問,在實時嵌入式系統(tǒng)中是否也有Python的一席之地,。答案是肯定的,。下面是開發(fā)人員發(fā)現(xiàn)Python在實時嵌入式系統(tǒng)開發(fā)中有可能扮演的五個主要角色。
作用# 1設(shè)備調(diào)試和控制
在嵌入式軟件開發(fā)過程中,,開發(fā)人員常常需要分析總線通信量,,如USB、SPI或I2C,。有的分析僅僅是出于調(diào)試目的,,但有時則需要控制總線分析儀并發(fā)送信息至嵌入式系統(tǒng),。許多總線分析儀和通信工具都有友好的用戶接口,可以用來控制工具,。他們通常還提供一種方法來開發(fā)腳本,,也可以用來控制工具。Python是一種普遍支持的腳本語言,,有時則是一些工具的接口,,或是用來控制工具。
作用# 2–自動化測試
通過Python控制工具在嵌入式系統(tǒng)中發(fā)送和接收消息的能力,,使得利用Python構(gòu)建自動化測試(包括回歸測試)成為可能,。Python腳本可以設(shè)置嵌入式系統(tǒng)進入不同的狀態(tài),設(shè)置配置文件,,并測試所有可能的干擾以及系統(tǒng)與外部環(huán)境的相互作用,。使用Python開發(fā)自動化測試的好處是,回歸測試可以開發(fā)持續(xù)測試并訓練系統(tǒng),。任何的代碼變動導致的bug或不合格的結(jié)果都將被實時的檢測出來,。
作用# 3–數(shù)據(jù)分析
通過Web簡單地搜索Python庫,你會發(fā)現(xiàn),,有許多免費強大的Python庫都可以用來開發(fā)應(yīng)用程序,。Python可以用來接收非常重要的嵌入式系統(tǒng)數(shù)據(jù),然后存儲到數(shù)據(jù)庫或是本地進行分析,。開發(fā)者還可以使用Python開發(fā)實時可視化功能來展現(xiàn)臨界參數(shù),,或是存儲這些參數(shù)用于后續(xù)分析。使用Python進行數(shù)據(jù)分析的優(yōu)點之一是當基礎(chǔ)性工作完成之后,,新功能的植入會顯得比較簡單,。
作用# 4–實時軟件
Python已經(jīng)證實了自己的強大性和易使用性,甚至發(fā)現(xiàn)它是作為一門編程語言進入實時嵌入式系統(tǒng),。是的,,嵌入式軟件本身就是用Python寫的而不是C/C++。用于實時軟件最廣泛的Python版本是MicroPython,,大多是設(shè)計在ARM Cortex-M3/4微控制器上運行,。MicroPython并不孤立。Synapse和OpenMV公司在嵌入式系統(tǒng)中既使用MicroPython也使用他們自己的Python port,。對MicroPython感興趣的讀者可能對DesignNews(EDN的姐妹機構(gòu))的繼續(xù)教育課程也感興趣,。
作用# 5–學習面向?qū)ο缶幊?/p>
Python是一門免費的編程語言,可以跨多個平臺使用,,對于學生和非編程人員而言比較簡單,。該語言與C語言不同,它也是現(xiàn)代式的,并且可以在自由形態(tài)的腳本類型中結(jié)構(gòu)化,,或是作為一個復雜的面向?qū)ο蟮捏w系結(jié)構(gòu),。Python本身也很靈活。甚至還有這種情景:沒有編程經(jīng)驗的電氣工程師可以利用Python寫出有用的測試腳本或用最少的時間實施電板檢查,。
Python的學習曲線并不陡峭,,熟悉Python學習曲線的開發(fā)人員發(fā)現(xiàn),當你有了其它語言的基礎(chǔ)之后,,學習Python比學習任意其他的編程語言都要簡單,。出于這些原因,當開發(fā)人員看到Python扮演著編程孵化器角色,,并吸收其它缺乏經(jīng)驗的工程師對宜早不宜遲的設(shè)計周期做出貢獻時,,不應(yīng)該感到驚訝。
什么?Python+FPGA!?
夏宇聞老師幾個月前在微信上推薦了一個帖子,,說的是有人用Digilent的PYNQ-Z1板卡實現(xiàn)了超強的加速性能。
早年,,關(guān)于FPGA的開發(fā)都是基于硬件描述語言,,從開始的VHDL到現(xiàn)在更為流行的Verilog,軟件應(yīng)用也從由最開始的匯編語言發(fā)展到現(xiàn)在的c/c++實現(xiàn),,這些都是目前為大多數(shù)FPGA開發(fā)者所熟悉的FPGA發(fā)展路程,。上個月,IEEE收錄了一篇關(guān)于使用Python開發(fā)FPGA應(yīng)用的論文,。
在美國納帕舉行的第25屆關(guān)于可編程計算機器領(lǐng)域IEEE國際討論會上,,一篇名為“評估通過Python快速開發(fā)異構(gòu)處理器FPGA應(yīng)用性能”的短篇論文獲得了最佳短篇論文獎。這篇論文主要討論了Python開發(fā)FPGA應(yīng)用的優(yōu)勢和效率,,論文中針對Digilent的PYNQ-Z1板卡(內(nèi)部集成一個Xilinx Zynq SoC),,通過支持Python編程和Jupyter Notebooks框架的PYNQ開發(fā)環(huán)境,應(yīng)用Python對此板卡進行開發(fā)編程,,并最終評估開發(fā)結(jié)果的優(yōu)勢和效率,。值得一提的是,發(fā)表這篇論文的作者都是業(yè)界大佬,,包括高級計算機科學家AndrewG.Schmidt,、計算機科學家Gabriel Weise以及來自美國南加州大學工程技術(shù)科學協(xié)會的研究室主任Matthew French。在論文中,,Matthew French教授主要就利用PYNQ開發(fā)環(huán)境,,應(yīng)用Python語言對Xilinx Zynq器件進行編程應(yīng)用開發(fā)時對FPGA器件的影響、性能結(jié)果以及瓶頸影響進行了評估,。此外,,各位教授就基于Python的開發(fā)結(jié)果與已經(jīng)存在的基于C語言的開發(fā)及手動開發(fā)結(jié)果進行了比較分析。
在論文中,各位教授還對PYNQ開發(fā)環(huán)境的優(yōu)缺點進行了闡述:
首先來說,,PYNQ應(yīng)用開發(fā)框架是一個開源的開發(fā)環(huán)境,,提供了標準的可以約束芯片I/O引腳的“Overlay”比特流,同時,,開發(fā)人員可以在此開發(fā)環(huán)境中,,利用Python對FPGA進行快速編程開發(fā)。此外,,PYNQ開發(fā)環(huán)境內(nèi)部集成標準的編程范式,,支持HDMI和視頻流的輸出輸出,同時具有兩組12pin的PMOD連接器和一個兼容Arduino的連接器(可以連接或配置為Arduino系列板卡),。其中,,默認的overlay中實例化了多個可以驅(qū)動多I/O接口的微Blaze處理器核,也可以配置一些支持圖像濾波功能和試驗SIMT(單指令,,多線程)編程軟邏輯GPU的overlay,。同時,PYNQ也提供了支持比特流編程的API和可擴展的通用Python庫和包,,并且可以通過存儲映射I/O(MMIO)直接尋址可編程邏輯單元,,另外還支持DMA交易(不需要經(jīng)過器件驅(qū)動和核模塊之間的不斷握手確認)。
其次,,就目前來說,,PYNQ還不支持任何高級的綜合,也無法將Python應(yīng)用直接移植到FPGA中,。這就意味著,,開發(fā)者依然原型必須使用FPGA來創(chuàng)建一個設(shè)計,即當PYNQ提供一個支持板卡IO接口的Overlay框架以時,,任何用戶邏輯依然必須由開發(fā)者親自創(chuàng)建并綜合,。不過,開發(fā)者仍然可以使用高級綜合工具或上面提到的Python-to-HDL工程來完成這個任務(wù),,但是最終,,開發(fā)者依然需要基于此設(shè)計并創(chuàng)建一個整合了Python代碼比特流文件。
也正是由于PYNQ存在這方面的缺陷,,論文的作者并沒有簡單依賴現(xiàn)存的PYNQ API接口和overlay,,他們開發(fā)出一個基于Redsharc項目的特定應(yīng)用程序內(nèi)核進行研究,。
結(jié)果如何呢?論文最后,,作者對給出了Python開發(fā)Zynq應(yīng)用的各項評估結(jié)果,。結(jié)果中給出了通過c/c++實現(xiàn)這項研究的一般圖像處理管道性能,以及定制的硬件加速器和Python實現(xiàn)的性能結(jié)果(下圖所示),,幫助我們更好地理解了Python + FPGA開發(fā)環(huán)境的性能和能,。表中可以看出,,結(jié)果十分明顯,通過PYNQ實現(xiàn)較c實現(xiàn)速度提高了30倍之多,,更甚者,,從結(jié)果中可以看出,當Python實現(xiàn)時有更加有效的可用庫時,,比如OpenCV,,其性能可以增長更多。
Python軟件實現(xiàn)和FPGA性能潛力的結(jié)合是一個非常有意義的工作,,將會開創(chuàng)出一個類似于樹莓派和Arduino的廣大的開發(fā)者社區(qū),。Python+FPGA是一個廣闊的未經(jīng)勘察過的領(lǐng)域——一個全新的更加高效的開發(fā)空間——通過PYNQ開發(fā)環(huán)境將會吸引更多的系統(tǒng)開發(fā)者加入的領(lǐng)域。
日前在賽靈思OPENHW2017創(chuàng)新大賽暨教師峰會上,,北京理工大學嵩天副教授《Python編程語言和PYNQ在中國》的演講,,科普了Python編程風靡全球的原因。
Python編程語言舉例,,只用了21行代碼就完成了一個圖像素描的處理,,Python大大提升了開發(fā)效率。
人工智能和機器學習走熱,,讓 Python 從眾多編程語言中脫穎而出,。
還等什么呢?
人生苦短,我用Python
附11大編程語言薪資排行榜
編程語言有很多,,但并非每一種的需求或工資都相同。人工智能和機器學習走熱,,讓 Python 從眾多編程語言中脫穎而出,。下文將綜合各種信源,以不同編程語言在美國市場的相關(guān)薪資水平,、人氣和前景,,為你提供一些參考。
薪資水平
使用國外招聘網(wǎng)站 Indeed.com 將編程語言的薪資水平劃分為 9 檔:基于這個結(jié)果,,Ruby/Ruby on Rails 看起來會讓你掙得最多,,而 Python,C++,,iOS 和 Java 也是體面的選擇,。如果薪資是你的主要關(guān)注點,那么也許 C,,PHP 和 SQL 不是最理想的選擇……