嵌入式的挑戰(zhàn)
目前社會(huì)上對嵌入式的理解,也就是商家炒作出來的概念:嵌入式=ARM+Linux??墒亲鳛殡娮訉I(yè)出身的我,套用老師總結(jié)出的概念,我能發(fā)現(xiàn)很多東西都屬于嵌入式:MP3、手機(jī)、ATM、好記星等等。學(xué)嵌入式為什么偏要去學(xué)ARM+Linux呢,而且還難!還不一定找的到工作!
先從硬件說起:
硬件要做一款產(chǎn)品很不容易,要考慮各種方案的選型,而硬件方案的選型可不像移動(dòng)開發(fā)一樣是選Android呢還是iOS,是用Java還是Delphi那么簡單,哦,你問我用什么框架?我還想問框架是什么意思呢!硬件工程師眼中只有電路圖!原理圖!(OS:電路圖和原理圖就是同一種東西好么...)以及這電路圖是否有人實(shí)現(xiàn)過。
好了,會(huì)看電路圖了,總要做出來給老板看的吧?于是必須會(huì)焊接。做嵌入式硬件的絕對離不開主控芯片,不然還叫什么嵌入式工程師啊?所以該芯片的最小系統(tǒng)是要會(huì)焊接出來的。
最小系統(tǒng)實(shí)現(xiàn)了,那么就可以搭接各種傳感器,往智能硬件方向走;或者移植一個(gè)操作系統(tǒng),往人機(jī)界面(UI)方向走。
當(dāng)然,你也可以到此為止,不去做產(chǎn)品,而是做各種硬件模塊或開發(fā)板,再拿出去賣。如果我沒有理解錯(cuò),這個(gè)叫方案提供商。
「我們公司是賣方案的。」——一個(gè)小工程師這么介紹自己的公司。
當(dāng)然,也有的硬件公司是出售自家生產(chǎn)芯片及模塊,附送自家的SDK(軟件開發(fā)包)。我們這些客戶(用戶、工程師、二次開發(fā)者)稱這硬件公司為原廠(官方),代碼稱為原廠的代碼(或者官方的代碼)。賣芯片的公司,叫芯片供應(yīng)商。
我想說的是,還有公司是拿原廠的芯片做最小系統(tǒng)模塊,再賣給我們這些二次開發(fā)者(三次開發(fā)者)用……像這些賣方案賣芯片的公司,嵌入式硬件工程師最多了!
我喜歡把嵌入式分為四個(gè)層次,硬件層、驅(qū)動(dòng)層、系統(tǒng)層和應(yīng)用層,前面說完了硬件,下面說軟件。
如果某個(gè)人在單片機(jī)上寫過定時(shí)器、數(shù)碼管、溫度傳感器的程序,用過UART、SPI、IIC、CAN等通信方式、更厲害的話接觸過藍(lán)牙協(xié)議棧或者TCP/IP協(xié)議棧,稱其為驅(qū)動(dòng)工程師應(yīng)該沒什么不妥吧?都是底層代碼,雖然有難有易。
系統(tǒng)層。一般個(gè)人或小公司是寫不了的,聽說Windows某版本用了300人寫了2年。只有大公司才會(huì)想著自己寫系統(tǒng),比如最近的新聞:華為推自主物聯(lián)網(wǎng)操作系統(tǒng)Liteos 對全球免費(fèi)開放
而我們個(gè)人所能做的是把操作系統(tǒng)移植到芯片上去。
另外補(bǔ)充一個(gè)知識(shí)點(diǎn):一個(gè)操作系統(tǒng),一般來說有五樣?xùn)|西:內(nèi)存管理、進(jìn)程管理、文件系統(tǒng)、設(shè)備硬件接口和網(wǎng)絡(luò)通信。在嵌入式領(lǐng)域里,可能會(huì)針對不同的應(yīng)用情況而對系統(tǒng)層進(jìn)行裁減,比如裁減掉文件系統(tǒng)和網(wǎng)絡(luò)通信,只留下內(nèi)存、進(jìn)程和硬件接口就可以了。
如果你現(xiàn)在干的活硬件層是ARM芯片、系統(tǒng)層是Linux。
那么就是ARM+Linux嵌入式工程師,但是你以為你是要做上面的活嗎?不!
你只是在ARM+Linux上面修修改改,上面所說的硬件和驅(qū)動(dòng)的活都交給其他人或上游公司做了,但是那些人也可以說是在做嵌入式!
然后呢,安卓本質(zhì)上不也是Linux么?所以如果你是在做安卓底層開發(fā),安卓APP開發(fā),本質(zhì)上也是在做嵌入式!而且Android和iOS不是常常相提并論嗎?于是iOS開發(fā)也是嵌入式開發(fā)了……真是讓人不可思議!
另外,除了ARM+Linux/Android,還有其他的芯片+系統(tǒng),比如:STM32+uCOS,ARM+WinCE。
按照目前社會(huì)對嵌入式這個(gè)詞語的理解,可能就在這個(gè)范圍內(nèi)。像我這樣電子專業(yè)出身的人,對嵌入式的理解就沒那么狹隘。
我還想說的是:驅(qū)動(dòng)層和系統(tǒng)層這一類的工程師,因?yàn)椴恍枰笃男薷亩袌鲂枨罅可?,因?yàn)樾枰喿x大量的代碼和要有很多Debug經(jīng)驗(yàn)而人才稀少。
近年來嵌入式這三個(gè)字那么火,但還是一個(gè)被培訓(xùn)機(jī)構(gòu)炒作出來的概念!最重要的還是要回到現(xiàn)實(shí)中具體是做什么的!你在這一家公司做嵌入式工程師,可能根本就不能擔(dān)任另一家的嵌入式工程師!所以……
嵌入式最大的坑,就是定義未清!
嵌入式定義未清,又被商家炒作,就會(huì)有一大堆人趨之若鶩(包括我),接觸之后發(fā)覺并不是自己想象的那樣,想退出卻發(fā)現(xiàn)自己除了嵌入式其他什么也不會(huì),想去互聯(lián)網(wǎng)行業(yè),發(fā)現(xiàn)自己HTML、CCS、JavaScript、PHP、Delphi、C#一概不知!
互聯(lián)網(wǎng)只要一臺(tái)電腦+一個(gè)服務(wù)器就能賺錢,軟件還是零成本;而嵌入式,你們知道我媽看了我做的畢業(yè)設(shè)計(jì)之安卓手機(jī)藍(lán)牙遙控三色燈,第一句話說了什么嗎?這屬于制造業(yè)嗎?
補(bǔ)充:
后來想了想不能說定義未清,應(yīng)該說是定義太廣泛。
嵌入式系統(tǒng)在書本上的定義很明確,也很長,具體可查某百科。我的嵌入式老師只用了三個(gè)詞語就總結(jié)了嵌入式系統(tǒng)的精髓:專用的 可裁剪的 計(jì)算機(jī)系統(tǒng)。
嵌入式工程師簡直就是硬件工程師與軟件工程師的合體!別問我是哪一類軟件工程師,反正不是前端、后端、APP、測試、運(yùn)維。也別問我是什么硬件工程師,電源、單片機(jī)、高頻、通信……你會(huì)做你就上!給你個(gè)嵌入式工程師的頭銜你就是軟件硬件小能手,堪比全棧工程師。
所以,如果你是想進(jìn)入嵌入式行業(yè)的人,請把握好自己的學(xué)習(xí)方向,不要被培訓(xùn)機(jī)構(gòu)的炒作而迷途。