幾十年來,大家普遍的認為C與C++才是標準的嵌入式語言,那麼現在大火的Python算是一種嵌入式語言嗎?
在給出我的答案之前我們要先明確幾個問題?
程式語言(英語:programming language),是用來定義計算機程式的形式語言。它是一種被標準化的交流技巧,用來向計算機發出指令,一種能夠讓程式設計師準確地定義計算機所需要使用資料的計算機語言,並精確地定義在不同情況下所應當採取的行動。
最早的程式語言是在電腦發明之前產生的,當時是用來控制提花織布機及自動演奏鋼琴的動作。在電腦領域已發明了上千不同的程式語言,而且每年仍有新的程式語言誕生。很多程式語言需要用指令方式說明計算的程式,而有些程式語言則屬於宣告式程式設計,說明需要的結果,而不說明如何計算。
程式語言主要分為編譯型和解釋型,靜態語言和動態語言,強型別和弱型別,混合語言等。
通過編譯器把原始碼編譯(compile)成機器語言,在經過連結(linker)將原始碼中所使用的庫串聯起來生成可執行二進位制檔案,這樣執行時計算機可以直接以機器語言來執行程式。
優點:執行效率高。
缺點:編譯之後如果需要修改程式碼需要重新編譯整個模組。
編譯的時候根據對應的執行環境生成機器碼,不同的作業系統之間移植就會有問題,需要根據執行的作業系統環境編譯不同的可執行檔案
代表語言:C,C++,Objective-C等。
不需要編譯,只在程式執行時才逐條翻譯成機器語言。這種程式語言需要利用直譯器,在執行期,動態將程式碼逐句解釋為機器程式碼,或是已經預先編譯為機器程式碼的子程式,之後再執行。
優點:跨平臺支援比較好,
缺點:程式執行效率會比較慢。
如:python,php,Perl等。
Python是一種廣泛使用的解釋型、高階和通用的程式語言。
Python支援多種程式設計範型,包括函數式、指令式、反射式、結構化和物件導向程式設計。
它擁有動態型別系統和垃圾回收功能,能夠自動管理記憶體使用,並且其本身擁有一個巨大而廣泛的標準庫。它的語言結構以及物件導向的方法旨在幫助程式設計師為小型的和大型的專案編寫清晰的、合乎邏輯的程式碼。
Python開發者的哲學是「用一種方法,最好是隻有一種方法來做一件事」。
優點:
缺點:
從上面的資訊可以看出,Python與標準的C/C++還是有很大的不同的,這些不同甚至從該語言的設計之初就決定了。
但我們僅從前後兩者不同就能簡單的得出結論嗎?顯然不合適,所以我們還需要知道什麼是嵌入式語言?
嵌入式,英語是 embedded,表示「嵌入式的,植入的,內含的」。
首先,嵌入式有不少組合名詞,例如嵌入式系統,嵌入式軟體,Linux 嵌入式,Android 嵌入式,嵌入式 Web,等等。
IEEE電氣工程師學會:
嵌入式系統是控制、監視或輔助機器和裝置執行的裝置。
從這裡可以看出,老外們是特別看重應用的,一切講究實際,不抽象,直接就是硬剛。
再來看看咱們國家的:
嵌入式系統是指以應用為中心,以計算機技術為基礎,軟、硬體可剪裁,適應應用系統對功能、可靠性、成本、體積和功耗嚴格要求的專用計算機系統。
講究的就是一個面面俱到。
所以,按我的理解,嵌入式就是:
對於嵌入式語言來講最重要的一點就是:面向硬體程式設計。
這個面向硬體有兩層含義:
第一是說需要了解硬體特性,然後通過程式設計來存取硬體。
例如通過讀寫暫存器完成對外設的控制,簡單如GPIO,複雜一些像Ethernet控制器,除了瞭解硬體的操作邏輯,也需要了解引腳、電平、IO複用、、硬體快取、DMA這些概念。
第二是說硬體資源帶來的限制。
這是由於嵌入式產品通常針對具體系統,涉及的技術約束大概有計算能力,IO介面,記憶體,體積,功耗,等方面的約束,在這些約束下進行技術選型和系統設計,很多時候硬體選微控制器,ARM,PowerPC,軟體使用裸機,RTOS或經過裁剪的linux是比較合適的選擇,就是合適,我們也可以用牛刀殺雞,但是沒必要。
第二個重要的要求就是:足夠的效率。
不能因為語言本身佔過多資源,這個時候需要虛擬機器器或直譯器的語言就不太合適,而C/C++通過指標(地址)存取硬體的操作最自然不過,也可以做到較少的資源消耗。
從傳統的嵌入式語言的定義來看,Python似乎從各個方面都算不上一個標準的嵌入式語言。
通過上文的一些關於定義方面的解釋,似乎,Python很難稱得上一門標準的嵌入式語言。
但有一點大家不要忘記,我們學的這些程式語言,最終只有一個目的,那就是應用。
近些年,隨著Python越來越多的被應用於嵌入式和邊緣系統,IEEE(電氣電子工程師學會)早已經Python歸為嵌入式語言了。(網址:IEEE)
這不僅代表了樹莓派所帶來的影響,還表明了連線到雲端的邊緣系統也需具備智慧的事實。
我這幾天也在學習一個很有趣的嵌入式AI的框架PYNQ。
PYNQ是Python On Zynq的縮寫,它是一個軟體開發框架,指導硬體層、驅動層和應用層之間的介面設計。
底層硬體用的是FPGA,驅動核心使用的是Linux,上層一些智慧演演算法(比如語音識別,臉部辨識等)靠的是Python提供API介面。(感興趣的同學可以去這個網址:PYNQ)
雖然不想承認,但時代總是再向前發展的,一些固定領域的技術框架,終會被新生的技術所影響,但只要明確一點:一切以應用為導向,就沒有什麼可以影響到我們。
加油!!!!!!
(上海這兩天終於下雨了,不聊了,寫完部落格該剪視訊去了)。
對了,我最近再整理個人知識庫,感興趣的朋友們關注一波啊~
https://www.yuque.com/aiyanjiudexiaohutongxue
參考文獻:
維基百科
http://t.csdn.cn/BxEsY
https://www.cnblogs.com/iron2222/p/15640242.html
https://juejin.cn/post/6844904196819386376
https://zhuanlan.zhihu.com/p/294255155