- 相關推薦
嵌入式工程師必須知道的事
如果你是一個嵌入式開發的學習者,那么就應該跟yjbys來看看以下這篇為即將進入嵌入式開發的工程師們詳細講述嵌入式的概念、嵌入式開發之間的異同以及應該如何做出選擇。是一些經驗之談,希望對大家有所幫助。
一.工程師眼中的“嵌入式系統”
在工程師看來:著重理解“嵌入”的概念,主要從三個方面來理解:
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 內核的最高的處理器了。
2、從軟件上,就是在定制操作系統內核里將應用一并選入,編譯后將內核下載到ROM 中。而在定制操作系統內核時所選擇的應用程序組件就是完成了軟件的“嵌入”,比如WinCE 在內核定制時,會有相應選擇,其中就是 wordpad,PDF,MediaPlay 等等選擇,如果我們選擇了,在CE 啟動后,就可以在界面中找到這些東西,如果是以前PC 上的windows 操作系統,多半的東西都需要我們得新再裝。
3、把軟件內核或應用文件系統等東西燒到嵌入式系統硬件平臺中的ROM 中就實現了一個真正的“嵌入”。 以上的定義是我在6、7年前給嵌入式系統下自話側重于理解型的定義,書上的定義也有很多,但在這個領域范圍 內,誰都不敢說自己的定義是十分確切的,包括那些專家學者們,因為畢竟嵌入式系統是計算機范疇下的一門綜合性學科。
二.嵌入式系統的分層及對口專業要求
嵌入式系統分為4層,硬件層、驅動層、操作系統層和應用層。
1.硬件層:是整個嵌入式系統的根本。如果現在單片機及接口這塊很熟悉,并且能用C 和匯編語言來編程的話,從嵌入式系統的硬件層走起來相對容易,硬件層也是驅動層的基礎,一個優秀的驅動工程師是要能夠看懂硬件的電路圖和自行完成CPLD 的邏輯設計的,同時還要對操作系統內核及其調度有相當的熟悉。但硬件平臺是基礎,增值還要靠軟件。
硬件層比較適合于電子、通信、自動化、機電一體、信息工程類專業的人來搞。需要掌握的專業基礎知識有: 單片機原理及接口技術、微機原理及接口技術、C 語言等。
2.驅動層:這部分相對而言比較難。驅動工程師不僅要能看懂電路圖,還要能對操作系統內核十分的精通,以便其所寫的驅動程序在系統調用時,不會獨占操作系統時間片,而導致其它任務不能運行。若不懂操作系統內核架構和實時調度性,沒有良好的驅動編寫風格,按大多數書上所說添加的驅動的方式,這樣可能連個初級的驅動工程師的水平都達不到,所寫的驅動在應用調用時就如同windows 下我們打開一個程序運行后,再打開一個程序時,要不就是中斷以前的程序,要不就是等上一會才能運行后來打開的程序。想做個好的驅動人員沒有三、四年功底,操作系統內核不研究上幾遍,不是太容易成功的,但其工資在嵌入式系統四層中是最高的。 驅動層比較適合于電子、通信、自動化、機電一體、信息工程類專業尤其是計算機偏體系結構類專業的人來搞。 當然除硬件層所具備的基礎學科外,還要對數據結構與算法、操作系統原理、編譯原理都要十分精通。
3.操作系統層:對于操作系統層而言目前可能只能說是簡單的移植,而很少有人來自已寫操作系統,或者寫出缺胳膊少腿的操作系統來,這部分工作大都由驅動工程師來完成。操作系統是負責系統任務的調試、磁盤和文件的管理,而嵌入式系統的實時性十分重要。據說,XP 操作系統是微軟投入300人用兩年時間才搞定的,總時工時是 600人/年;中科院軟件所自己的女媧Hopen 操作系統估計也得花幾百人/年才能搞定。因此這部分工作相對來講沒有太大意義。
4.應用層:相對來講較為容易。如果會在windows 下進行編程接口函數調用,到操作系統下只是編譯和開發環境有相應的變化而已。如果涉及Java方面的編程也是如此。嵌入式系統中涉及算法的由專業算法的人來處理,不必歸結到嵌入式系統范疇內。但如果涉及嵌入式系統下面的嵌入式數據庫、基于嵌入式系統的網絡編程和基于某些應用層面的協議應用開發(比如基于SIP、H.323、Astrisk)方面,又較為復雜,并且有度了。
三.目標與定位
先有目標,再去定位。
學ARM,從硬件上講,一方面就是學習接口電路設計,另一方面就是學習匯編和C 語言的板級編程。從軟件上講,就是要學習基于ARM 處理器的操作系統層面的驅動和移植。這些對于初學者來說必須明確,要么從硬件著手開始學,要么從操作系統的熟悉到應用開始學,但不管學什么,只要不是純的操作系統級以上基于API 的應用層的編程,硬件的寄存器類的東西還是要能看懂的、基于板級的匯編和C 編程還是要會的。因此針對于嵌 入式系統的硬件層和驅動層的人來說,ARM 的接口電路設計、ARM 的C 語言和匯編語言編程及調試開發環境還是需要掌握的。
對于初學者必然要把握住方向,自己的目標是什么,自己要在哪一層面上走。然后再著手學習才比較好,與 ARM 相關的嵌入式系統的較為實際的兩個層面硬件層和驅動層,不管學好了那一層都會很有前途的。 如果想從嵌入式系統的應用層面的走的話,可能與ARM 及其它體系相去較遠,要著重研究基嵌入式操作系統的 環境應用與相應開發工具鏈,比如WinCE 操作系統下的EVC 應用開發(與windows 下的VC 相類似),如果想再 有突破就往某些音視頻類的協議上靠,比如VOIP 領域的基于SIP 或H.323協議的應用層開發,或是基于嵌入式 網絡數據庫的開發等等。
對于初學者來講,要量力而行,不要認為驅動層工資高就把它當成方向了,要結合自身特點,嵌入式系統四個層 面上無論哪個層面上來講都是有高人存在,當然高人也對應的高工資。我是做硬件層的,以前每月工資中個人所 得稅要被扣上近3千大元。當然我一方面充當工程師的角色,一方面充當主管人物的角色,兩個職位我一個人干, 但上班時間就那些。硬件這方面上可能與我PK 的人很少了,才讓我拿到那么多的工資。
四.如何選擇合適的開發系統
很多ARM 初學者都希望有一套自己能用的系統,但他們往往會產生一種錯誤認識,就是認為處理器版本越高越好,性能越高越好,就象很多人認為ARM9比ARM7好, 我想對于初學者在此方面以此入門還應該理智,開發系統的選擇最終要看自己往嵌入式系統的哪個方向上走,是做驅動開發還是應用,還是做嵌入式系統硬件層設計與板級測試。如果想從操作系統層面或應用層面上走,不管是驅動還是應用,當然處理器性能越高越好了,但這個東西自學,有十分大的困難,不是幾個月或半年或是一年二年能搞定的事。
在某種意義上講,ARM7與ARM9的差別就是在某些功能指令集上豐富了些,主頻提高一些而已,就比如286 和386。對于用戶來講可能覺察不到什么,只能是感覺速度有些快而已。
ARM7比較適合于那些想從硬件層面上走的人,因為ARM7系列處理器內部帶MMU 的很少,而且比較好控 制。就比如S3C44B0來講,可以很容易將Cache 關了,而且內部接口寄存器很容易看明白,各種接口對于用硬件 程序控制或AXD 單步命令行指令都可以控制起來;51單片機的思想很容易搞懂,就當成個32位的單 片機,從而消除很多51工程師想轉為嵌入式系統硬件ARM 開發工程師的困惑,從而不會被業界某些不是真正懂 嵌入式爛公司帶到操作系統層面上去,讓他們望而生畏,讓業界更加缺少這方面的人才。
而嵌入式系統不管硬件設計還是軟件驅動方面都是十分注重接口這部分的,選擇平臺還要考察一個處理器的外部資源,你接觸外部資源越多,越熟悉他們,以后就業成功的機率就越高,這就是招聘時所說的有無“相關技能”,因為一個人不可能在短短幾年內把所有的處理器都接觸一遍,而招聘單位所用的處理器就可能是我們完 全沒有見過的,就拿臺灣數十家小公司(市價幾千萬)的公司生產的ARM 類處理器,也很好用,但這些東西通用性 太差,用這些處理器的公司就只能招有相關工作經驗的人了,那什么是相關工作經驗,在硬件上講的是外圍接口設計,在軟件上講是操作系統方面相關接口驅動及應用開發經驗。我從業近十年, 2000年ARM 出現,我一開始做ARM7,然后直接跑到了Xscale(這個板本在ARM10-11之間),一做就是五年,招人面試都不下數百人,在這些方面還是深有體會的。
我個人認為三星的S3C44b0對初學者來說比較合適,為什么這么說? 因為接口資源比較豐富,技術成熟,資料較多,應該十分適合于初學者。有問題可能很容易找人幫且解決,因為大多數人都很熟悉,就如同51類的單片 機,有N多位專家級的人物可以給你幫忙,相關問題得以很快解答,所然業界認為這款ARM 都用得爛了,但對于初學者來,卻是件好事。
總的來說,開發系統的選擇,要看自己的未來從業目標方向,要看開發板接口資源,還要看業界的通用性。
五.成為高級嵌入式系統硬件工程師要具備的技能
對于硬件來講有幾個方向,就單純信號來分為數字和模擬。模擬比較難搞,一般需要很長的經驗積累,單單一個阻值或容值的精度不夠就可能使信號偏差很大。因此年輕人搞的較少,隨著技術的發展,出現了模擬電路數字化。 比如手機的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 設計的輔助工具類如Protel OR CADPowper PCBMaplux2ISE、VDHL 語言,要能用到這些工具畫圖畫板做邏輯設計,再有就是接口設計審圖能力, 再者就是調試能力,如果能走到總體方案設計這塊,那就基本上快成為資深工程師了。
深入了解各種器件特性,選擇最合適的處理器、外圍器件、操作系統和軟件庫,盡可能地優化軟件設計,最貼切地滿足應用需求,以獲得最好的系統性價比,是嵌入式系統設計開發的精髓。
硬件是要靠經驗,也要靠積累的,十年磨一劍,百年磨一針。
不過最后提醒大家:追求技術不是人生的唯一目的,切不可把它當成喜悅的唯一源泉,平時身邊有很多美好的事物都值得用心去珍惜。呵呵,我已經在擔心自己的智力是否會在30歲到來之前枯竭了.好好珍惜短暫的大學生活,好好珍惜自己的青春,不要整天呆在實驗室,左手鍵盤右手烙鐵的。
更多相關文章推薦:
【嵌入式工程師必須知道的事】相關文章:
日本留學五個必須要知道的事10-22
2017考研調劑你必須知道的那些事09-14
幼兒家長必須知道的33件事05-27
日本留學租房你必須知道的事06-07
軟件工程師必須知道的20個常識10-18
軟件工程師必須知道的10個概念08-11
鋼琴入門必須要知道的九件事06-03
女士必須知道的社交禮儀07-07
備考雅思 這些必須知道!07-13
學化妝必須知道的知識08-30