部落客福利:100G+電子設計學習資源包!
http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect --------------------------------------------------------------------------------------------------------------------------
1. 着重了解“嵌入”的概念
從硬體上
“嵌入”将基于CPU的處圍器件,整合到CPU晶片内部,比如早期基于X86體系結構下的計算機,CPU隻是有運算器和累加器的功能,一切晶片要造外部橋路來擴充實作,像序列槽之類的都是靠外部的16C550/2的序列槽控制器晶片實作,而目前的這種序列槽控制器晶片早已內建到CPU内部,還有PC機有顯示卡,而多數嵌入式處理器都帶有LCD控制器,但其種意義上就相當于顯示卡。
比較高端的ARM類Intel Xscale架構下的IXP網絡處理器CPU内部內建PCI控制器(可配成支援4個PCI從裝置或配成自身為CPI從裝置);還內建3個NPE網絡處理器引擎,其中兩個對應于兩個MAC位址, 可用于網關交換用,而另外一個NPE網絡處理器引擎支援DSL,隻要外面再加個PHY晶片即可以實作DSL上網功能。
IXP系列最高主頻可以達到 1.8G,支援2G記憶體,1G×10或10G×1的以太網口或Febre channel的光通道。IXP系列應該是目标基于ARM體系統結構下由 intel進行整合後成Xscale核心的最高的處理器了。
從軟體上
嵌入就是在定制作業系統核心裡将應用一并選入,編譯後将核心下載下傳到ROM中。而在定制作業系統核心時所選擇的應用程式組 件就是完成了軟體的“嵌入”,比如WinCE在核心定制時,會有相應選擇,其中就是wordpad,PDF,MediaPlay等等選擇,如果我們選擇 了,在CE啟動後,就可以在界面中找到這些東西,如果是以前PC上将的windows作業系統,多半的東西都需要我們得新再裝。
軟硬結合
把軟體核心或應用檔案系統等東西燒到嵌入式系統硬體平台中的ROM中就實作了一個真正的“嵌入”。
2. 嵌入式系統分層設計結構
硬體層
整個嵌入式系統的根本,如果現在單片機及接口這塊很熟悉,并且能用C和彙編語言來程式設計的話,從嵌入式系統的硬體層走起來相對容易,硬體層也是驅動層的基礎,一個優秀的驅動工程師是要能夠看懂硬體的電路圖和自行完成CPLD的邏輯設計的,同時還要對作業系統核心及其排程性相當的熟悉的。
但硬體平台是基礎,增值還要靠軟體。硬體層比較适合于,電子、通信、自動化、機電一體、資訊工程類專業的人來搞,需要掌握的專業基礎知識有,單片機原理及接口_技術、微機原理及接口_技術、C語言。
驅動層
這部分比較難,驅動工程師不僅要能看懂電路圖還要能對作業系統核心十分的精通,以便其所寫的驅動程式在系統調用時,不會獨占作業系統時間片,而導 至其它任務不能動行,不懂作業系統核心架構和實時排程性,沒有良好的驅動編寫風格,按大多數書上所說添加的驅動的方式,很多人都能做到,但可能連個初級的 驅動工程師的水準都達不到,這樣所寫的驅動在應用調用時就如同windows下我們打開一個程式運作後,再打開一個程式時,要不就是中斷以前的程式,要不 就是等上一會才能運作後來打開的程式。
想做個好的驅動人員沒有三、四年功底,作業系統核心不研究上幾編,不是太容易成功的,但其工資在嵌入式系統四層中可 是最高的。
嵌入式的驅動層比較适合于電子、通信、自動化、機電一體、資訊工程類專業尤其是計算機偏體系結構類專業的人來搞,除硬體層所具備的基礎學科外,還要對資料結構與算法、作業系統原理、編譯原理都要十分精通了解。
作業系統層
對于作業系統層目前可能隻能說是簡單的移植,而很少有人來自已寫作業系統,或者寫出缺胳膊少腿的作業系統來,這部分工作大都由驅動工程師來完成。作業系統是負責系統任務的調試、磁盤和檔案的管理,而嵌入式系統的實時性十分重要。
據說,XP作業系統是微軟投入300人用兩年時間才搞定的,總時工時是600人年,中科院軟體所自己的女娲Hopen作業系統估計也得花遇幾百人年才能搞定。是以這部分工作相對來講沒有太大意義。
應用層
相對來講較為容易的,如果會在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之間),一做就是五年,招人面試都不下數百人,在這些方面還是深有體會的。是以開發系統的選擇,要看自己的未來從來目标方向、要看開發闆接口資源、還要看業界的通用性。
5. 進階嵌入式硬體工程師要具備的技能
對于硬體來講有幾個方向,就單純信号來分為數字和模拟,模拟比較難搞,一般需要很長的經驗積累,單單一個阻值或容值的精度不夠就可能使信号偏差很大。是以年輕人搞的較少,随着技術的發展,出現了模拟電路數字化,比如手機的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燒上幾個。
是以想成為一個優秀的工程師,需要對系統整體性的把握和對已有電路的了解,換句話說,給你一套電路圖你 終究能看明白多少,看不明白80%以上的話,說明你離優秀的工程師還差得遠哪。其次是電路的調試能力和審圖能力,但最最基本的能力還是原理圖設計PCB繪制,邏輯設計這塊。
這是指的硬體設計工程師,從上面的硬體設計工程師中還可以分出ECAD工程師,就是專業的畫PCB闆的工程師,和EMC設計工程師,幫人家解決EMC的問題。硬體工程師再往上就是闆級測試工程師,就是C語功底很好的硬體工程師,在電路闆調試過程中能通過自已編寫的測試程式對硬體功能進行驗證。然後再交給基于作業系統級的驅動開發人員。