嵌入式工程師經(jīng)驗分享:如何學習嵌入式開發(fā)
一、嵌入式系統(tǒng)的概念
著重理解“嵌入”的概念
主要從三個方面上來理解。
1、從硬件上,將基于CPU的處圍器件,整合到CPU芯片內部,比如早期基于X86體系結構下的計算機,CPU只是有運算器和累加器的功能,一切芯片要造外部橋路來擴展實現(xiàn),象串口之類的都是靠外部的16C550/2的串口控制器芯片實現(xiàn),而目前的這種串口控制器芯片早已集成到CPU內部,還有PC機有顯卡,而多數(shù)嵌入式處理器都帶有LCD控制器,但其種意義上就相當于顯卡。比較高端的ARM類Intel Xscale架構下的IXP網(wǎng)絡處理器CPU內部集成PCI控制器(可配成支持4個PCI從設備或配成自身為CPI從設備);還集成3個NPE網(wǎng)絡處理器引擎,其中兩個對應于兩個MAC地址, 可用于網(wǎng)關交換用,而另外一個NPE網(wǎng)絡處理器引擎支持DSL,只要外面再加個PHY芯片即可以實現(xiàn)DSL上網(wǎng)功能。IXP系列最高主頻可以達到 1.8G,支持2G內存,1G×10或10G×1的以太網(wǎng)口或Febre channel的光通道。IXP系列應該是目標基于ARM體系統(tǒng)結構下由 intel進行整合后成Xscale內核的最高的處理器了。
2、從軟件上前,就是在定制操作系統(tǒng)內核里將應用一并選入,編譯后將內核下載到ROM中。而在定制操作系統(tǒng)內核時所選擇的應用程序組 件就是完成了軟件的“嵌入”,比如WinCE在內核定制時,會有相應選擇,其中就是wordpad,PDF,MediaPlay等等選擇,如果我們選擇 了,在CE啟動后,就可以在界面中找到這些東西,如果是以前PC上將的windows操作系統(tǒng),多半的東西都需要我們得新再裝。
3、把軟件內核或應用文件系統(tǒng)等東西燒到嵌入式系統(tǒng)硬件平臺中的ROM中就實現(xiàn)了一個真正的“嵌入”。以上的定義是我在6、7年前給嵌入式系統(tǒng)下自話側重于理解型的定義,書上的定義也有很多,但在這個領域范圍內,誰都不敢說自己的定義是十分確切的,包括那些專家學者們,歷為畢竟嵌入式系統(tǒng)是計算機范疇下的一門綜合性學科
二、嵌入式系統(tǒng)的分層與專業(yè)的分類。
嵌入式系統(tǒng)分為4層,硬件層、驅動層、操作系統(tǒng)層和應用層。
1、硬件層,是整個嵌入式系統(tǒng)的根本,如果現(xiàn)在單片機及接口這塊很熟悉,并且能用C和匯編語言來編程的話,從嵌入式系統(tǒng)的硬件層走起來相對容易,硬件層也是驅動層的基礎,一個優(yōu)秀的驅動工程師是要能夠看懂硬件的電路圖和自行完成CPLD的邏輯設計的,同時還要對操作系統(tǒng)內核及其調度性相當?shù)氖煜さ摹5布脚_是基礎,增值還要靠軟件。硬件層比較適合于,電子、通信、自動化、機電一體、信息工程類專業(yè)的人來搞,需要掌握的專業(yè)基礎知識有,單片機原理及接口技術、微機原理及接口技術、C語言。
2、 驅動層,這部分比較難,驅動工程師不僅要能看懂電路圖還要能對操作系統(tǒng)內核十分的精通,以便其所寫的驅動程序在系統(tǒng)調用時,不會獨占操作系統(tǒng)時間片,而導 至其它任務不能動行,不懂操作系統(tǒng)內核架構和實時調度性,沒有良好的驅動編寫風格,按大多數(shù)書上所說添加的驅動的方式,很多人都能做到,但可能連個初級的 驅動工程師的水平都達不到,這樣所寫的驅動在應用調用時就如同windows下我們打開一個程序運行后,再打開一個程序時,要不就是中斷以前的程序,要不 就是等上一會才能運行后來打開的程序。想做個好的驅動人員沒有三四年功底,操作系統(tǒng)內核不研究上幾編,不是太容易成功的,但其工資在嵌入式系統(tǒng)四層中可 是最高的。
驅動層比較適合于電子、通信、自動化、機電一體、信息工程類專業(yè)尤其是計算機偏體系結構類專業(yè)的人來搞,除硬件層所具備的基礎學科外,還要對數(shù)據(jù)結構與算法、操作系統(tǒng)原理、編譯原理都要十分精通了解。
3、操作系統(tǒng)層,對于操作系統(tǒng)層目前可能只能說是簡單的移植,而很少有人來自已寫操作系統(tǒng),或者寫出缺胳膊少腿的操作
統(tǒng)來,這部分工作大都由驅動工程師來完成。操作系統(tǒng)是負責系統(tǒng)任務的調試、磁盤和文件的管理,而嵌入式系統(tǒng)的實時性十分重要。據(jù)說,XP操作系統(tǒng)是微軟投入300人用兩年時間才搞定的,總時工時是600人年,中科院軟件所自己的女媧Hopen操作系統(tǒng)估計也得花遇幾百人年才能搞定。因此這部分工作相對來講沒有太大意義。
4、應用層,相對來講較為容易的,如果會在windows下如何進行編程接口函數(shù)調用,到操作系統(tǒng)下只是編譯和開發(fā)環(huán) 境有相應的變化而已。如果涉及Jave方面的編程也是如此的。嵌入式系統(tǒng)中涉及算法的由專業(yè)算法的人來處理的,不必歸結到嵌入式系統(tǒng)范疇內。但如果涉及嵌 入式系統(tǒng)下面嵌入式數(shù)據(jù)庫、基于嵌入式系統(tǒng)的網(wǎng)絡編程和基于某此應用層面的協(xié)議應用開發(fā)(比如基于SIP、H.323、Astrisk)方面又較為復雜, 并且有難度了。
三、目標與定位。
先有目標,再去定位。
學 ARM,從硬件上講,一方面就是學習接口電路設計,另一方面就是學習匯編和C語言的板級編程。如果從軟件上講,就是要學習基于ARM處理器的操作系統(tǒng)層面 的驅動、移植了。這些對于初學都來說必須明確,要么從硬件著手開始學,要么從操作系統(tǒng)的熟悉到應用開始學,但不管學什么,只要不是純的操作系統(tǒng)級以上基于 API的應用層的編程,硬件的寄存器類的東西還是要能看懂的,基于板級的匯編和C編程還是要會的。因此針對于嵌入式系統(tǒng)的硬件層和驅動程的人,ARM的接 口電路設計、ARM的C語言和匯編語言編程及調試開發(fā)環(huán)境還是需要掌握的。
因此對于初學者必然要把握住方向,自己的目標是什么,自己要在那一層面上走。然后再著手學習較好,與ARM相關的嵌入式系統(tǒng)的較為實際的兩個層面硬件層和驅動層,不管學好了那一層都會很有前途的。如果想從嵌入式系統(tǒng)的應用層面的走的話,可能與ARM及其它體系相去較遠,要著重研究基嵌入式操作系統(tǒng)的環(huán)境應用與相應開發(fā)工具鏈,比如WinCe操作系統(tǒng)下的EVC應用開發(fā)(與windows下的VC相類似),如果想再有突破就往某些音視頻類的協(xié)議上靠,比如VOIP領域的基于SIP或H.323協(xié)議的應用層開發(fā),或是基于嵌入式網(wǎng)絡數(shù)據(jù)庫的開發(fā)等等。
于初學者來講,要量力而行,不要認為驅動層工資高就把它當成方向了,要結合自身特點,嵌入式系統(tǒng)四個層面上那個層面上來講都是有高人存在,當然高人也對應 的高工資,我是做硬件層的,以前每月工資中個人所得稅要被扣上近3千大元,當然我一方面充當工程師的角色,一方面充當主管及人物的角色,兩個職位我一個人 干,但上班時間就那些。硬件這方面上可能與我PK的人很少了,才讓我拿到那么多的工資。[!--empirenews.page--]
四、開發(fā)系統(tǒng)選擇。
很多ARM初學者都希望有一套自己能用的系統(tǒng),但他們住住會產(chǎn)生一種錯誤認識就是認為處理器版本越高、性能越高越好,就象很多人認為ARM9與ARM7好, 我想對于初學者在此方面以此入門還應該理智,開發(fā)系統(tǒng)的選擇最終要看自己往嵌入式系統(tǒng)的那個方向上走,是做驅動開發(fā)還是應用,還是做嵌入式系統(tǒng)硬件層設計 與板級測試。如果想從操作系統(tǒng)層面或應用層面上走,不管是驅動還是應用,那當然處理器性能越高越好了,但這個東西自學,有十分大的困難,不是幾個月或半年 或是一年二年能搞定的事。
在某種意義上請,ARM7與9的差別就是在某些功能指令集上豐富了些,主頻提高一些而已,就比如286和386。對于用戶來講可能覺查不到什么,只能是感覺速度有些快而已。
ARM7比較適合于那些想從硬件層面上走的人,因為ARM7系列處理器內部帶MMU的很少,而且比較好控制,就比如S3C44B0來講,可以很容易將 Cache關了,而且內部接口寄存器很容易看明白,各種接口對于用硬件程序控制或AXD單步命令行指令都可以控制起來,基于51單片機的思想很容易能把他 搞懂,就當成個32位的單片機,從而消除很多51工程師想轉為嵌入式系統(tǒng)硬件ARM開發(fā)工程師的困惑,從而不會被業(yè)界某此不是真正懂嵌入式爛公司帶到操作 系統(tǒng)層面上去,讓他們望而失畏,讓業(yè)界更加缺少這方面的人才。
而嵌入式系統(tǒng)不管硬件設計還是軟件驅動方面都是十分注重接口這部分的,選擇平臺還要考察一個處理器的外部資源,你接觸外部資源越多,越熟悉他們那你以后就業(yè)成功的機率就越高,這就是招聘時 所說的有無“相關技能”,因為一個人不可能在短短幾年內把所有的處理器都接觸一遍,而招聘單位所用的處理器就可能是我們完全沒有見過的,就拿臺灣數(shù)十家小 公司(市價幾千萬)的公司生產(chǎn)的ARM類處理器,也很好用,但這些東西通用性太差,用這些處理器的公司就只能招有相關工作經(jīng)驗的人了,那什么是相關工作經(jīng) 驗,在硬件上講的是外圍接口設計,在軟件上講是操作系統(tǒng)方面相關接口驅動及應用開發(fā)經(jīng)驗。我從業(yè)近十年,2000年ARM出現(xiàn),我一天始做ARM7,然后 直接跑到了Xscale(這個板本在ARM10-11之間),一做就是五年,招人面試都不下數(shù)百人,在這些方面還是深有體會的。
我個人認為三星的S3C44b0對初學者來說比較合適,為什么這么說哪?因為接口資源比較豐富,技術成熟,資料較多,應該十分適合于初學者,有問題可能很容易找人幫且解決,因為大多數(shù)人都很熟悉,就如同51類的單片機,有N多位專家級的人物可以給你幫忙,相關問題得以很快解答,所然業(yè)界認為這款ARM都做用得爛了,但對于初學者來,就卻是件好事。因此開發(fā)系統(tǒng)的選擇,要看自己的未來從來目標方向、要看開發(fā)板接口資源、還要看業(yè)界的通用性。
五、如何看待培訓。
首先說說我自己,我目前從業(yè)近十年,與國內嵌入式系統(tǒng)行業(yè)共同起步,一直站在嵌入式系統(tǒng)行業(yè)前沿,設計過多款高端嵌入式系統(tǒng)平臺產(chǎn)品并為眾多公司提供過解決方案,離職前為從事VOIP的美資公司設計IP-PBX,歷任項目經(jīng)理、項目主管、技術總監(jiān)、部門經(jīng)理,積累眾多人脈,并集多年經(jīng)驗所得,考慮到學生就業(yè)與公司招人的不相匹配,公司想招人招不到,而學生和剛畢業(yè)的工程師想找份工作也不太容易,于此力創(chuàng)知天行科技有限公司,開展嵌入式系統(tǒng)教育培訓。因 一線的科研人員和一線的教師不相接觸,導至國內嵌入式人才缺乏,國外高校的技術超前于業(yè)界公司,而國內情況是業(yè)界公司方面的嵌入式系統(tǒng)技術要遠遠領先于高 校。為架構業(yè)界與高校溝通的橋梁,把先進技能帶給高校學子,為學生在就業(yè)競爭打造一張王牌,并為業(yè)界工程師快速提升實現(xiàn)自我創(chuàng)造機遇,我就這樣辭去了外 企年薪20多萬的職位,做嵌入式系統(tǒng)方面的培訓了。
對于培訓來講,是花錢來買時間,很多工程師都喜歡自己學,認為培訓不值,這也是有 可能的,純?yōu)橘嶅X的培訓當然不會太有價值,但對于實力型的培訓他們可能就虧大了,有這樣一筆帳不知他們算過沒有,如果一個一周的培訓,能帶給他們自學兩年 后才能掌握的知識,在培訓完后他們用三個月到半年時間消化培訓內容,這樣他會省約至少一年半的時間來學其它的或重新站在另一個高度上工作,那么他將最遲一 年后會拿到他兩年后水平所對應的工資,就是在工資與水平對應的關系上比同批人縮短一年,每月按最少1千計,再減去培訓費用至少多1.0萬,同時也省了一年 時間,不管是休閑也好,再繼續(xù)提高也好,總之是跑到了隊伍的前面了。另一層面上講,對于新人的培訓相當于他們?yōu)樽约禾崆百I了份失業(yè)保險,有師傅會帶領他們入道,我今年暑假時班里最年輕的一個學生是大二的,今年才上大三,這學期才剛學單片機,但現(xiàn)在ARM方面的編程工作已經(jīng)搞得有聲有色了,再過一年多畢業(yè),還會失業(yè)嗎?
或者通過培訓,你可以知道很多業(yè)界不為常人所知的事,同時也為自己找了個師傅,就比如說,兩個工程師分別用S3C2410和PXA255來做手持設備,同樣 兩人都工作四年,再出去找工作,兩人工資可能最多可相差一倍,為什么?這就是業(yè)界不為常人所知的規(guī)則,2410屬于民品,被業(yè)界用爛了,做產(chǎn)品時成本特敏 感,當然也對人才成本敏感了,PXA255是intel的東西,一個255CPU能買三個2410,一直被業(yè)界定義為貴產(chǎn)品,用的公司都是大公司或為 軍方服務的公司,不會在乎成本,只要把東西做好,一切都好說,但這方面做的人也少啊,因為開發(fā)系統(tǒng)貴啊。對于說為自已找了個好師傅, 我想是這樣的,因為同級工程師間存在著某此潛在的競爭關系,有很多人不愿意把自己知道的東西教給別人,這意味著他將要失業(yè),就是所說的教會徒弟,餓死師 傅,但對于我們這些人就不存在這樣的關系了,我是在嵌入式系統(tǒng)平臺設計上走到了一定程序,目前在國內這塊的技術上已經(jīng)是自己很難再突破自己,因此很多東西 我對大家都是OPEN的,就比如說下面那部分關于接口設計中所提到的時序接口東西,我要是不講,卻使是高級硬件工程師我想也幾乎只有10%的人能知道吧。