十年經驗教你如何學習嵌入式系統(基於ARM平臺)
1、嵌入式系統的概念
着重理解「嵌入」的概念 前端
主要從三個方面上來理解。
1、從硬件上,將基於CPU的處圍器件,整合到CPU芯片內部,好比早期基於X86體系結構下的計算機,CPU只是有運算器和累面試
加器的功能,一切芯片要造外部橋路來擴展實現,象串口之類的都是靠外部的16C550/2的串口控制器芯片實現,而目前的這種串算法
口控制器芯片早已集成到CPU內部,還有PC機有顯卡,而多數嵌入式處理器都帶有LCD控制器,但其種意義上就至關於顯卡。比較數據庫
高端的ARM類Intel Xscale架構下的IXP網絡處理器CPU內部集成PCI控制器(可配成支持4個PCI從設備或配成自身爲CPI從設備);編程
還集成3個NPE網絡處理器引擎,其中兩個對應於兩個MAC地址, 可用於網關交換用,而另一個NPE網絡處理器引擎支持DSL,只windows
要外面再加個PHY芯片便可以實現DSL上網功能。IXP系列最高主頻能夠達到 1.8G,支持2G內存,1G×10或10G×1的以太網口或網絡
Febre channel的光通道。IXP系列應該是目標基於ARM體系統結構下由 intel進行整合後成Xscale內核的最高的處理器了。
2、從軟件上前,就是在定製操做系統內核裏將應用一併選入,編譯後將內核下載到ROM中。而在定製操做系統內核時所選擇數據結構
的應用程序組 件就是完成了軟件的「嵌入」,好比WinCE在內核定製時,會有相應選擇,其中就是wordpad,PDF,MediaPlay等等選架構
擇,若是咱們選擇 了,在CE啓動後,就能夠在界面中找到這些東西,若是是之前PC上將的windows操做系統,多半的東西都須要函數
咱們得新再裝。
3、把軟件內核或應用文件系統等東西燒到嵌入式系統硬件平臺中的ROM中就實現了一個真正的「嵌入」。
以上的定義是我在6、7年前給嵌入式系統下自話側重於理解型的定義,書上的定義也有不少,但在這個領域範圍內,誰都不
敢說本身的定義是十分確切的,包括那些專家學者們,歷爲畢竟嵌入式系統是計算機範疇下的一門綜合性學科
2、嵌入式系統的分層與專業的分類。
嵌入式系統分爲4層,硬件層、驅動層、操做系統層和應用層。
1、硬件層,是整個嵌入式系統的根本,若是如今單片機及接口這塊很熟悉,而且能用C和彙編語言來編程的話,從嵌入式系統的
硬件層走起來相對容易,硬件層也是驅動層的基礎,一個優秀的驅動工程師是要可以看懂硬件的電路圖和自行完成CPLD的邏輯設
計的,同時還要對操做系統內核及其調度性至關的熟悉的。但硬件平臺是基礎,增值還要靠軟件。
硬件層比較適合於,電子、通訊、自動化、機電一體、信息工程類專業的人來搞,須要掌握的專業基礎知識有,單片機原理
及接口技術、微機原理及接口技術、C語言。
2、 驅動層,這部分比較難,驅動工程師不只要能看懂電路圖還要能對操做系統內核十分的精通,以便其所寫的驅動程序在
系統調用時,不會獨佔操做系統時間片,而導 至其它任務不能動行,不懂操做系統內核架構和實時調度性,沒有良好的驅動編寫
風格,按大多數書上所說添加的驅動的方式,不少人都能作到,但可能連個初級的 驅動工程師的水平都達不到,這樣所寫的驅動
在應用調用時就如同windows下咱們打開一個程序運行後,再打開一個程序時,要不就是中斷之前的程序,要不 就是等上一會才
能運行後來打開的程序。想作個好的驅動人員沒有3、四年功底,操做系統內核不研究上幾編,不是太容易成功的,但其工資在
嵌入式系統四層中可 是最高的。
驅動層比較適合於電子、通訊、自動化、機電一體、信息工程類專業尤爲是計算機偏體系結構類專業的人來搞,除硬件層所
具有的基礎學科外,還要對數據結構與算法、操做系統原理、編譯原理都要十分精通了解。
3、操做系統層,對於操做系統層目前可能只能說是簡單的移植,而不多有人來自已寫操做系統,或者寫出缺胳膊少腿的操做
系統來,這部分工做大都由驅動工程師來完成。操做系統是負責系統任務的調試、磁盤和文件的管理,而嵌入式系統的實時性十
分重要。聽說,XP操做系統是微軟投入300人用兩年時間才搞定的,總時工時是600人年,中科院軟件所本身的女媧Hopen操做系統
估計也得花遇幾百人年才能搞定。所以這部分工做相對來說沒有太大意義。
4、應用層,相對來說較爲容易的,若是會在windows下如何進行編程接口函數調用,到操做系統下只是編譯和開發環 境有相
應的變化而已。若是涉及Jave方面的編程也是如此的。嵌入式系統中涉及算法的由專業算法的人來處理的,沒必要歸結到嵌入式系
統範疇內。但若是涉及嵌 入式系統下面嵌入式數據庫、基於嵌入式系統的網絡編程和基於某此應用層面的協議應用開發(好比基
於SIP、H.323、Astrisk)方面又較爲複雜, 而且有難度了。
3、目標與定位。
先有目標,再去定位。
學 ARM,從硬件上講,一方面就是學習接口電路設計,另外一方面就是學習彙編和C語言的板級編程。若是從軟件上講,就是
要學習基於ARM處理器的操做系統層面 的驅動、移植了。這些對於初學都來講必須明確,要麼從硬件着手開始學,要麼從操做系統
的熟悉到應用開始學,但無論學什麼,只要不是純的操做系統級以上基於 API的應用層的編程,硬件的寄存器類的東西仍是要能
看懂的,基於板級的彙編和C編程仍是要會的。所以針對於嵌入式系統的硬件層和驅動程的人,ARM的接 口電路設計、ARM的C語言
和彙編語言編程及調試開發環境仍是須要掌握的。
所以對於初學者必然要把握住方向,本身的目標是什麼,本身要在那一層面上走。而後再着手學習較好,與ARM相關的嵌入
式系統的較爲實際的兩個層面硬件層和驅動層,無論學好了那一層都會頗有前途的。
若是想從嵌入式系統的應用層面的走的話,可能與ARM及其它體系相去較遠,要着重研究基嵌入式操做系統的環境應用與相
應開發工具鏈,好比WinCe操做系統下的EVC應用開發(與windows下的VC相相似),若是想再有突破就往某些音視頻類的協議上靠
,好比VOIP領域的基於SIP或H.323協議的應用層開發,或是基於嵌入式網絡數據庫的開發等等。
對 於初學者來說,要量力而行,不要認爲驅動層工資高就把它當成方向了,要結合自身特色,嵌入式系統四個層面上那個
層面上來說都是有高人存在,固然高人也對應 的高工資,我是作硬件層的,之前每個月工資中我的所得稅要被扣上近3千大元,當
然我一方面充當工程師的角色,一方面充當主管及人物的角色,兩個職位我一我的 幹,但上班時間就那些。硬件這方面上可能與
我PK的人不多了,才讓我拿到那麼多的工資。
4、開發系統選擇。
很 多ARM初學者都但願有一套本身能用的系統,但他們住住會產生一種錯誤認識就是認爲處理器版本越高、性能越高越好,
就象不少人認爲ARM9與ARM7好, 我想對於初學者在此方面以此入門還應該理智,開發系統的選擇最終要看本身往嵌入式系統的那
個方向上走,是作驅動開發仍是應用,仍是作嵌入式系統硬件層設計 與板級測試。若是想從操做系統層面或應用層面上走,無論
是驅動仍是應用,那固然處理器性能越高越好了,但這個東西自學,有十分大的困難,不是幾個月或半年 或是一年二年能搞定的
事。
在某種意義上請,ARM7與9的差異就是在某些功能指令集上豐富了些,主頻提升一些而已,就好比286和386。對於用戶來說
可能覺查不到什麼,只能是感受速度有些快而已。
ARM7比較適合於那些想從硬件層面上走的人,由於ARM7系列處理器內部帶MMU的不多,並且比較好控制,就好比S3C44B0來說,可
以很容易將 Cache關了,並且內部接口寄存器很容易看明白,各類接口對於用硬件程序控制或AXD單步命令行指令均可以控制起來
,基於51單片機的思想很容易能把他 搞懂,就當成個32位的單片機,從而消除不少51工程師想轉爲嵌入式系統硬件ARM開發工程
師的困惑,從而不會被業界某此不是真正懂嵌入式爛公司帶到操做 系統層面上去,讓他們望而失畏,讓業界更加缺乏這方面的人
才。
而嵌入式系統無論硬件設計仍是軟件驅動方面都是十分注重接口這部分的,選擇平臺還要考察一個處理器的外部資源,你接
觸外部資源越多,越熟悉他們那你之後就業成功的機率就越高,這就是招聘時 所說的有無「相關技能」,由於一我的不可能在短
短几年內把全部的處理器都接觸一遍,而招聘單位所用的處理器就多是咱們徹底沒有見過的,就拿臺灣數十家小 公司(市價幾
千萬)的公司生產的ARM類處理器,也很好用,但這些東西通用性太差,用這些處理器的公司就只能招有相關工做經驗的人了,那
什麼是相關工做經 驗,在硬件上講的是外圍接口設計,在軟件上講是操做系統方面相關接口驅動及應用開發經驗。我從業近十年
,2000年ARM出現,我一天始作ARM7,而後 直接跑到了Xscale(這個板本在ARM10-11之間),一作就是五年,招人面試都不下數百
人,在這些方面仍是深有體會的。
我我的認爲三星的S3C44b0對初學者來講比較合適,爲何這麼說哪?由於接口資源比較豐富,技術成熟,資料較多,應該
十分適合於初學者,有問題可能很容易找人幫且解決,由於大多數人都很熟悉,就如同51類的單片機,有N多位專家級的人物能夠
給你幫忙,相關問題得以很快解答,所然業界認爲這款ARM都作用得爛了,但對於初學者來,就倒是件好事。
所以開發系統的選擇,要看本身的將來歷來目標方向、要看開發板接口資源、還要看業界的通用性。
5、如何看待培訓。
首先說說我本身,我目前從業近十年,與國內嵌入式系統行業共同起步,一直站在嵌入式系統行業前沿,設計過多款高端嵌
入式系統平臺產品併爲衆多公司提供過解決方案,離職前爲從事VOIP的美資公司設計IP-PBX,歷任項目經理、項目主管、技術總
監、部門經理,積累衆多人脈,並集多年經驗所得,考慮到學生就業與公司招人的不相匹配,公司想招人招不到,而學生和剛畢
業的工程師想找份工做也不太容易,於此力創知天行科技有限公司,開展嵌入式系統教育培訓。
因 一線的科研人員和一線的教師不相接觸,導至國內嵌入式人才缺少,國外高校的技術超前於業界公司,而國內狀況是業
界公司方面的嵌入式系統技術要遠遠領先於高 校。爲架構業界與高校溝通的橋樑,把先進技能帶給高校學子,爲學生在就業競爭
中打造一張王牌,併爲業界工程師快速提高實現自我創造機遇,我就這樣辭去了外 企年薪20多萬的職位,作嵌入式系統方面的培
訓了。
對於培訓來說,是花錢來買時間,不少工程師都喜歡本身學,認爲培訓不值,這也是有 可能的,純爲賺錢的培訓固然不會
太有價值,但對於實力型的培訓他們可能就虧大了,有這樣一筆賬不知他們算過沒有,若是一個一週的培訓,能帶給他們自學兩
年 後才能掌握的知識,在培訓完後他們用三個月到半年時間消化培訓內容,這樣他會省約至少一年半的時間來學其它的或從新站
在另外一個高度上工做,那麼他將最遲一 年後會拿到他兩年後水平所對應的工資,就是在工資與水平對應的關係上比同批人縮短一
年,每個月按最少1千計,再減去培訓費用至少多1.0萬,同時也省了一年 時間,無論是休閒也好,再繼續提升也好,總之是跑到了
隊伍的前面了。
另外一層面上講,對於新人的培訓至關於他們爲本身提早買了份失業保險,有師傅會帶領他們入道,我今年暑假時班裏最年輕
的一個學生是大二的,今年才上大三,這學期纔剛學單片機,但如今ARM方面的編程工做已經搞得有聲有色了,再過一年多畢業,
他還會失業嗎?
再 者經過培訓,你能夠知道不少業界不爲常人所知的事,同時也爲本身找了個師傅,就好比說,兩個工程師分別用S3C2410
和PXA255來作手持設備,一樣 兩人都工做四年,再出去找工做,兩人工資可能最多可相差一倍,爲何?這就是業界不爲常人所
知的規則,2410屬於民品,被業界用爛了,作產品時成本特敏 感,固然也對人才成本敏感了,PXA255是intel的東西,一個255
CPU能買三個2410,一直被業界定義爲貴族產品,用的公司都是大公司或爲 軍方服務的公司,不會在意成本,只要把東西作好,
一切都好說,但這方面作的人也少啊,由於開發系統貴啊。
對於說爲自已找了個好師傅, 我想是這樣的,由於同級工程師間存在着某此潛在的競爭關係,有不少人不肯意把本身知道
的東西教給別人,這意味着他將要失業,就是所說的教會徒弟,餓死師 傅,但對於咱們這些人就不存在這樣的關係了,我是在嵌
入式系統平臺設計上走到了必定程序,目前在國內這塊的技術上已是本身很難再突破本身,所以不少東西 我對你們都是OPEN的
,就好比說下面那部分關於接口設計中所提到的時序接口東西,我要是不講,卻使是高級硬件工程師我想也幾乎只有10%的人能知
道 吧。
6、成爲高級嵌入式系統硬件工程師要具有的技能。
對於硬件來說有幾個方向,就單純信號來分爲數字和模擬,模擬比較難搞,通常須要很長的經驗積累,單單一個阻值或容值
的精度不夠就可能使信號誤差很大。所以年輕人搞的較少,隨着技術的發展,出現了模擬電路數字化,好比手機的Modem射頻模塊
,都採用成熟的套片,而當年國際上只有兩家公司有此技術,自我感受模擬功能不太強的人,不太適合搞這個,若是真能搞定到
手機的射頻模塊,只要達到通常程度可能月薪都在15K以上。
另外一類就是數字部分了,在大方向上又可分爲51/ARM的單片機類,DSP類,FPGA類, 國內FPGA的工程師大可能是在IC設計公司
從事IP核的前端驗證,這部分不搞到門級,前途不太明朗,即便作個IC前端驗證工程師,也要搞上幾年才能勝任。 DSP硬件接口
比較定型,若是不向驅動或是算法上靠攏,前途也不會太大。而ARM單片機類的內容就較多,業界產品佔用量大,應用人羣廣,因
此就業空間極 大,而硬件設計最體現水平和水準的就是接口設計這塊,這是各個高級硬件工程師相互PK,斷定水平高低的依據。
而接口設計這塊最關鍵的是看時序,而不是簡單 的鏈接,好比PXA255處理器I2C要求速度在100Kbps,若是把一個I2C外圍器件,
最高還達不到100kbps的與它相接,必然要致使設計的失 敗。這樣的狀況有不少,好比51單片機能夠在總線接 LCD,但爲何這
種LCD就不能掛在ARM的總線上,還有ARM7總線上能夠外接個Winband的SD卡控制器,但爲何這種控制器接不到ARM9或 是Xscale
處理器上,這些都是問題。所以接口並非一種簡單的鏈接,要看時序,要看參數。 一個優秀的硬件工程師應該可以在沒有參考
方案的前提下設計 出一個在成本和性能上更加優秀的產品,靠現有的方案,也要進行適當的可行性裁剪,但不是胡亂的來,我遇
到一個工程師把方案中的5V變1.8V的DC芯片, 直接更換成LDO,有時就會把CPU燒上幾個。前幾天還有人但願我幫忙把他們之前基
於PXA255平臺的手持GPS設備作下程序優化,我問了一下狀況,地 圖是存在SD卡中的,而SD卡與PXA255的MMC控制器間採用的SPI
接口,所以致使地圖讀取速度十分的慢,這種狀況是設計中嚴重的缺陷,而不是程序 的問題,所以我提了幾條建議,讓他們更新
試下再說。所以想成爲一個優秀的工程師,須要對系統總體性的把握和對已有電路的理解,換句話說,給你一套電路圖你 終究能
看明白多少,看不明白80%以上的話,說明你離優秀的工程師還差得遠哪。其次是電路的調試能力和審圖能力,但最最基本的能力
仍是原理圖設計PCB繪 制,邏輯設計這塊。這是指的硬件設計工程師,從上面的硬件設計工程師中還能夠分出ECAD工程師,就是
專業的畫PCB板的工程師,和EMC設計工程師,幫 人家解決EMC的問題。硬件工程師再往上就是板級測試工程師,就是C語功底很好
的硬件工程師,在電路板調試過程當中能經過自已編寫的測試程序對硬件功能進行 驗證。而後再交給基於操做系統級的驅動開發人
員。
總之,硬件的內容不少很雜,硬件那方面練成了都會成爲一個高手,我時常會給人家作下方案評估,不少高級硬件工程師
設計的東西,常常被我一句話否認,所以工程師作到我這種地步,也會得罪些人,但硬件的確會有不少鮮爲人知的東西,讓不少
高級硬件工程師也摸不到頭腦。
那 麼高級硬件件工程師技術技能都要具有那些東西哪,首先要掌握EDA設計的輔助工具類如
ProtelORCADPowperPCBMaplux2ISE、 VDHL語言,要能用到這些工具畫圖畫板作邏輯設計,再有就是接口設計審圖能力,再者就是
調試能力,若是能走到整體方案設計這塊,那就基本上快成爲資深工 程師了。
硬件是要靠經驗,也要靠積累的,十年磨一劍,百年磨一針。 把一個月前想寫的東西,今天終於用一上午的進間整理完
了,但願對喜好嵌入式系統開發的工程師和學生們有所幫助。