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