淺談嵌入式以及嵌入式系統(tǒng)的入門和提高
本文主要做科普,給小白看,因為首先,嵌入式有不少組合名詞,例如嵌入式系統(tǒng),嵌入式軟件,Linux嵌入式,Android嵌入式,嵌入式Web,等等。
通常對嵌入式的定義其實是對“嵌入式系統(tǒng)”的定義。
網上對嵌入式系統(tǒng)的中文定義實在是不好理解,比較官方的中文定義是:
嵌入式系統(tǒng)是:以應用為中心,以計算機技術為基礎,軟硬件可裁剪,適應應用系統(tǒng)對功能、可靠性、成本、體積、功耗等嚴格要求的專用計算機系統(tǒng)。
當然了,這段定義是正確的,不過就是有點學究味,不夠形象,不夠“接地氣”。
那么如何來給嵌入式系統(tǒng)一個接地氣的定義呢?
我可以先列舉目前用到嵌入式系統(tǒng)的IT領域:
Android嵌入式開發(fā)。
Linux嵌入式開發(fā)。
智能手機,平板,智能手表。
可穿戴設備,例如Google眼鏡,小米手環(huán)。
微軟的Xbox和Kinect。
無人機。
VR頭盔。
無線路由器。
還有很多~
嵌入式正在滲透到我們生活的方方面面,而且會越來越多地被使用。
但是,例如Android,iOS純app開發(fā)的話一般就不能算是嵌入式了吧,只能算軟件開發(fā)。未來,也許我們可以有一身輕便的可穿戴設備,衣食住行都用得到。甚至未來可以穿一身輕薄的“飛行衣”,想去哪都行。
嵌入式編程,最近幾年越來越火,雖然入門門檻比較高,但是學好了薪資水平不錯哦。例如Linux嵌入式的高級工程師。而且如果你能啃下嵌入式這個“硬柿子”,學了很多方面的知識,那么其他一些編程領域,也許就能比較輕松地掌握了。就好比你如果熟練掌握了C++語言和C++,那么其他一些編程語言一般都可以輕松駕馭了。
在嵌入式編程中還有一個交叉編譯的概念:什么是交叉編譯呢?
簡單來說,就是“在一個平臺上生成另一個平臺上的可執(zhí)行代碼”。
普通的軟件開發(fā)過程中,如果是編譯型的編程語言,例如C語言,C++,Java,等等,你想要運行你寫的程序,需要用編譯器將代碼編譯成可執(zhí)行程序(當然,中間還有幾個步驟,比如匯編,鏈接,在此就不提了)。
但是嵌入式系統(tǒng)的計算能力有限,內存有限,儲存空間有限,因此無法完成比較需要資源和速度的編譯過程。
比如在Android嵌入式開發(fā)中,你不可能在Android手機里直接讓它編譯自己的系統(tǒng)或軟件吧。
因此,我們會先在普通電腦(比Android手機的計算能力更強,內存更大,儲存空間更大)里將程序編譯(需要不同于我們編譯普通軟件的編譯器,稱為“交叉編譯器/軟件”,比較常見的有arm-linux-gcc一族)成適配Android手機的特定可執(zhí)行文件(一般會打包成鏡像文件),然后通過專門的工具“燒錄”到Android手機里。
入門和提高嵌入式
1、嵌入式軟件的話不一定需要學很多硬件知識的(有的話當然是多多益善)。會用一些燒寫工具,編譯,調試工具(比如JTAG)就可以了,到時候要用了現(xiàn)學。開發(fā)工具也沒什么固定的,一般也不一定要IDE,用文本編輯器就可以寫代碼(比如Vim,Emacs,nano,Sublime)了。編譯一般用GCC的變種。
2、嵌入式一般要學C語言
3、C++不一定會用到,但也可以學一下。
4、Linux是要學習的。因為交叉編譯經常要用到Linux系統(tǒng),即使在Windows下也要用到Cygwin這類的。
5、最好花點時間學一下匯編,對理解計算機的原理,特別是內存,指針,二進制,十六進制都有很好幫助,不需要學很深。
6、嵌入式目前主流的處理器架構是ARM(以前是ARM7,ARM9,ARM11,現(xiàn)在都Cortex系列了)。手機,平板,大部分開發(fā)板都是ARM的天下。所以需要學一下ARM架構,有個了解。一開始對ARM不需要太深入,視以后情況而定。ARM的集成開發(fā)環(huán)境有ADS(ARMDeveloperSuite),是ARM處理器下主要的開發(fā)工具。
7、可以去買一塊便宜的開發(fā)板來開始學習。