發布成功
讚賞金額:
您輸入的金額有誤,請重新輸入
支付金額:5元
支付方式:
讚賞成功!
你的讚賞是對作者最大的肯定~?
學習(xi) ARM,從(cong) 硬件上講,一方麵就是學習(xi) 接口電路設計,另一方麵就是學習(xi) 匯編和C語言的板級編程。如果從(cong) 軟件上講,就是要學習(xi) 基於(yu) ARM處理器的操作係統層麵的驅動和移植了。這些對於(yu) 初學者來說必須明確,要麽(me) 從(cong) 硬件著手開始學,要麽(me) 從(cong) 操作係統的熟悉到應用開始學,但不管學什麽(me) ,隻要不是純的操作係統級以上基於(yu) API的應用層的編程,硬件的寄存器類的東(dong) 西還是要能看懂的、基於(yu) 板級的匯編和C編程還是要會(hui) 的。因此對於(yu) 嵌入式係統的硬件層和驅動層的人來說,ARM的接口電路設計、ARM的C語言和匯編語言編程及調試開發環境還是需要掌握的。
對於(yu) 初學者必然要把握住方向,自己的目標是什麽(me) ,自己要往哪一層麵上走。然後再著手學習(xi) 才比較好,與(yu) ARM相關(guan) 的嵌入式係統較為(wei) 實際的兩(liang) 個(ge) 層麵:硬件層和驅動層,不管學好了哪一層,都會(hui) 很有前途的。
如果想從(cong) 嵌入式係統應用層麵走的話,可能與(yu) ARM及其它體(ti) 係相去較遠,要著重研究基於(yu) 嵌入式操作係統的環境應用與(yu) 相應開發工具鏈,比如WinCE操作係統下的EVC應用開發 (與(yu) windows下的VC相類似),如果想再有突破就往某些音視頻類的協議上靠,比如VOIP領域的基於(yu) SIP或H.323協議的應用層開發,或是基於(yu) 嵌入式網絡數據庫的開發等等。
對於(yu) 初學者來講,要量力而行,不要認為(wei) 驅動層工資高就把它當成方向了,要結合自身特點,嵌入式係統4個(ge) 層麵,無論從(cong) 哪個(ge) 層麵上來講都是有高人存在,當然高人也對應的高工資。
如何理解“嵌入式”的概念呢?
1、從(cong) 硬件上,將基於(yu) CPU的處圍器件,整合到CPU芯片內(nei) 部,比如早期基於(yu) X86體(ti) 係結構下的計算機,CPU隻是有運算器和累加器的功能,一切芯片要造外部橋路來擴展實現,象串口之類的都是靠外部的16C550/2的串口控製器芯片實現,而目前的這種串口控製器芯片早已集成到CPU內(nei) 部,還有PC機有顯卡,而多數嵌入式處理器都帶有LCD控製器,但其種意義(yi) 上就相當於(yu) 顯卡。比較高端的ARM類Intel Xscale架構下的IXP網絡處理器CPU內(nei) 部集成PCI控製器(可配成支持4個(ge) PCI從(cong) 設備或配成自身為(wei) CPI從(cong) 設備);還集成3個(ge) NPE網絡處理器引擎,其中兩(liang) 個(ge) 對應於(yu) 兩(liang) 個(ge) MAC地址, 可用於(yu) 網關(guan) 交換用,而另外一個(ge) NPE網絡處理器引擎支持DSL,隻要外麵再加個(ge) PHY芯片即可以實現DSL上網功能。IXP係列最高主頻可以達到 1.8G,支持2G內(nei) 存,1G×10或10G×1的以太網口或Febre channel的光通道。IXP係列應該是目標基於(yu) ARM體(ti) 係統結構下由 intel進行整合後成Xscale內(nei) 核的最高的處理器了。
2、從(cong) 軟件上,就是在定製操作係統內(nei) 核裏將應用一並選入,編譯後將內(nei) 核下載到ROM中。而在定製操作係統內(nei) 核時所選擇的應用程序組 件就是完成了軟件的“嵌入”,比如WinCE在內(nei) 核定製時,會(hui) 有相應選擇,其中就是wordpad,PDF,MediaPlay等等選擇,如果我們(men) 選擇 了,在CE啟動後,就可以在界麵中找到這些東(dong) 西,如果是以前PC上將的windows操作係統,多半的東(dong) 西都需要我們(men) 得新再裝。
3、把軟件內(nei) 核或應用文件係統等東(dong) 西燒到嵌入式係統硬件平台中的ROM中就實現了一個(ge) 真正的“嵌入”。
以上的定義(yi) 是重於(yu) 理解型的定義(yi) ,書(shu) 上的定義(yi) 也有很多,但在這個(ge) 領域範圍內(nei) ,誰都不敢說自己的定義(yi) 是十分確切的,包括那些專(zhuan) 家學者們(men) ,曆為(wei) 畢竟嵌入式係統是計算機範疇下的一門綜合性學科
嵌入式係統的分層與(yu) 專(zhuan) 業(ye) 的分類
嵌入式係統分為(wei) 4層,硬件層、驅動層、操作係統層和應用層。
1、硬件層,是整個(ge) 嵌入式係統的根本,如果現在單片機及接口這塊很熟悉,並且能用C和匯編語言來編程的話,從(cong) 嵌入式係統的硬件層走起來相對容易,硬件層也是驅動層的基礎,一個(ge) 優(you) 秀的驅動工程師是要能夠看懂硬件的電路圖和自行完成CPLD的邏輯設計的,同時還要對操作係統內(nei) 核及其調度性相當的熟悉的。但硬件平台是基礎,增值還要靠軟件。
硬件層比較適合於(yu) ,電子、通信、自動化、機電一體(ti) 、信息工程類專(zhuan) 業(ye) 的人來搞,需要掌握的專(zhuan) 業(ye) 基礎知識有,單片機原理及接口技術、微機原理及接口技術、C語言。
2、 驅動層,這部分比較難,驅動工程師不僅(jin) 要能看懂電路圖還要能對操作係統內(nei) 核十分的精通,以便其所寫(xie) 的驅動程序在係統調用時,不會(hui) 獨占操作係統時間片,而導 至其它任務不能動行,不懂操作係統內(nei) 核架構和實時調度性,沒有良好的驅動編寫(xie) 風格,按大多數書(shu) 上所說添加的驅動的方式,很多人都能做到,但可能連個(ge) 初級的 驅動工程師的水平都達不到,這樣所寫(xie) 的驅動在應用調用時就如同windows下我們(men) 打開一個(ge) 程序運行後,再打開一個(ge) 程序時,要不就是中斷以前的程序,要不 就是等上一會(hui) 才能運行後來打開的程序。想做個(ge) 好的驅動人員沒有三、四年功底,操作係統內(nei) 核不研究上幾編,不是太容易成功的,但其工資在嵌入式係統四層中可 是最高的。
驅動層比較適合於(yu) 電子、通信、自動化、機電一體(ti) 、信息工程類專(zhuan) 業(ye) 尤其是計算機偏體(ti) 係結構類專(zhuan) 業(ye) 的人來搞,除硬件層所具備的基礎學科外,還要對數據結構與(yu) 算法、操作係統原理、編譯原理都要十分精通了解。
3、操作係統層,對於(yu) 操作係統層目前可能隻能說是簡單的移植,而很少有人來自已寫(xie) 操作係統,或者寫(xie) 出缺胳膊少腿的操作係統來,這部分工作大都由驅動工程師來完成。操作係統是負責係統任務的調試、磁盤和文件的管理,而嵌入式係統的實時性十分重要。據說,XP操作係統是微軟投入300人用兩(liang) 年時間才搞定的,總時工時是600人年,中科院軟件所自己的女媧Hopen操作係統估計也得花遇幾百人年才能搞定。因此這部分工作相對來講沒有太大意義(yi) 。
4、應用層,相對來講較為(wei) 容易的,如果會(hui) 在windows下如何進行編程接口函數調用,到操作係統下隻是編譯和開發環 境有相應的變化而已。如果涉及Jave方麵的編程也是如此的。嵌入式係統中涉及算法的由專(zhuan) 業(ye) 算法的人來處理的,不必歸結到嵌入式係統範疇內(nei) 。但如果涉及嵌 入式係統下麵嵌入式數據庫、基於(yu) 嵌入式係統的網絡編程和基於(yu) 某此應用層麵的協議應用開發(比如基於(yu) SIP、H.323、Astrisk)方麵又較為(wei) 複雜, 並且有難度了。
目標與(yu) 定位
先有目標,再去定位。
學 ARM,從(cong) 硬件上講,一方麵就是學習(xi) 接口電路設計,另一方麵就是學習(xi) 匯編和C語言的板級編程。如果從(cong) 軟件上講,就是要學習(xi) 基於(yu) ARM處理器的操作係統層麵 的驅動、移植了。這些對於(yu) 初學都來說必須明確,要麽(me) 從(cong) 硬件著手開始學,要麽(me) 從(cong) 操作係統的熟悉到應用開始學,但不管學什麽(me) ,隻要不是純的操作係統級以上基於(yu) API的應用層的編程,硬件的寄存器類的東(dong) 西還是要能看懂的,基於(yu) 板級的匯編和C編程還是要會(hui) 的。因此針對於(yu) 嵌入式係統的硬件層和驅動程的人,ARM的接 口電路設計、ARM的C語言和匯編語言編程及調試開發環境還是需要掌握的。
因此對於(yu) 初學者必然要把握住方向,自己的目標是什麽(me) ,自己要在那一層麵上走。然後再著手學習(xi) 較好,與(yu) ARM相關(guan) 的嵌入式係統的較為(wei) 實際的兩(liang) 個(ge) 層麵硬件層和驅動層,不管學好了那一層都會(hui) 很有前途的。
學 ARM,從(cong) 硬件上講,一方麵就是學習(xi) 接口電路設計,另一方麵就是學習(xi) 匯編和C語言的板級編程
如果想從(cong) 嵌入式係統的應用層麵的走的話,可能與(yu) ARM及其它體(ti) 係相去較遠,要著重研究基嵌入式操作係統的環境應用與(yu) 相應開發工具鏈,比如WinCe操作係統下的EVC應用開發(與(yu) windows下的VC相類似),如果想再有突破就往某些音視頻類的協議上靠,比如VOIP領域的基於(yu) SIP或H.323協議的應用層開發,或是基於(yu) 嵌入式網絡數據庫的開發等等。
對 於(yu) 初學者來講,要量力而行,不要認為(wei) 驅動層工資高就把它當成方向了,要結合自身特點,嵌入式係統四個(ge) 層麵上那個(ge) 層麵上來講都是有高人存在,當然高人也對應 的高工資,我是做硬件層的,以前每月工資中個(ge) 人所得稅要被扣上近3千大元,當然我一方麵充當工程師的角色,一方麵充當主管級人物的角色,兩(liang) 個(ge) 職位我一個(ge) 人 幹,但上班時間就那些。硬件這方麵上可能與(yu) 我PK的人很少了,才讓我拿到那麽(me) 多的工資。
開發係統選擇
很多ARM初學者都希望有一套自己能用的係統,但他們(men) 住住會(hui) 產(chan) 生一種錯誤認識就是認為(wei) 處理器版本越高、性能越高越好,就象很多人認為(wei) ARM9與(yu) ARM7好, 我想對於(yu) 初學者在此方麵以此入門還應該理智,開發係統的選擇最終要看自己往嵌入式係統的那個(ge) 方向上走,是做驅動開發還是應用,還是做嵌入式係統硬件層設計 與(yu) 板級測試。如果想從(cong) 操作係統層麵或應用層麵上走,不管是驅動還是應用,那當然處理器性能越高越好了,但這個(ge) 東(dong) 西自學,有十分大的困難,不是幾個(ge) 月或半年 或是一年二年能搞定的事。
在某種意義(yi) 上請,ARM7與(yu) 9的差別就是在某些功能指令集上豐(feng) 富了些,主頻提高一些而已,就比如286和386。對於(yu) 用戶來講可能覺查不到什麽(me) ,隻能是感覺速度有些快而已。
ARM7比較適合於(yu) 那些想從(cong) 硬件層麵上走的人,因為(wei) ARM7係列處理器內(nei) 部帶MMU的很少,而且比較好控製,就比如S3C44B0來講,可以很容易將 Cache關(guan) 了,而且內(nei) 部接口寄存器很容易看明白,各種接口對於(yu) 用硬件程序控製或AXD單步命令行指令都可以控製起來,基於(yu) 51單片機的思想很容易能把他 搞懂,就當成個(ge) 32位的單片機,從(cong) 而消除很多51工程師想轉為(wei) 嵌入式係統硬件ARM開發工程師的困惑,從(cong) 而不會(hui) 被業(ye) 界某此不是真正懂嵌入式爛公司帶到操作 係統層麵上去,讓他們(men) 望而失畏,讓業(ye) 界更加缺少這方麵的人才。
而嵌入式係統不管硬件設計還是軟件驅動方麵都是十分注重接口這部分的,選擇平台還要考察一個(ge) 處理器的外部資源,你接觸外部資源越多,越熟悉他們(men) 那你以後就業(ye) 成功的機率就越高,這就是招聘時 所說的有無“相關(guan) 技能”,因為(wei) 一個(ge) 人不可能在短短幾年內(nei) 把所有的處理器都接觸一遍,而招聘單位所用的處理器就可能是我們(men) 完全沒有見過的,就拿台灣數十家小 公司(市價(jia) 幾千萬(wan) )的公司生產(chan) 的ARM類處理器,也很好用,但這些東(dong) 西通用性太差,用這些處理器的公司就隻能招有相關(guan) 工作經驗的人了,那什麽(me) 是相關(guan) 工作經 驗,在硬件上講的是外圍接口設計,在軟件上講是操作係統方麵相關(guan) 接口驅動及應用開發經驗。我從(cong) 業(ye) 近十年,2000年ARM出現,我一天始做ARM7,然後 直接跑到了Xscale(這個(ge) 板本在ARM10-11之間),一做就是五年,招人麵試都不下數百人,在這些方麵還是深有體(ti) 會(hui) 的。
我個(ge) 人認為(wei) 三星的 S3C44b0對初學者來說比較合適,為(wei) 什麽(me) 這麽(me) 說哪?因為(wei) 接口資源比較豐(feng) 富,技術成熟,資料較多,應該十分適合於(yu) 初學者,有問題可能很容易找人幫且解決(jue) ,因為(wei) 大多數人都很熟悉,就如同51類的單片機,有N多位專(zhuan) 家級的人物可以給你幫忙,相關(guan) 問題得以很快解答,所然業(ye) 界認為(wei) 這款ARM都做用得爛了,但對於(yu) 初學者來,就卻是件好事。
因此開發係統的選擇,要看自己的未來從(cong) 來目標方向、要看開發板接口資源、還要看業(ye) 界的通用性。
硬件和軟件哪個(ge) 更有前程
就我所了解的,在現在以及可預見的未來,這個(ge) 行業(ye) 對軟件工程師的需求絕對是碾壓硬件工程師的。也就是說,招軟件工程師的職位比硬件工程師的職位要多的多,而且軟件工程師找工作上來說會(hui) 比硬件工程師更容易。
先從(cong) 企業(ye) 的角度來講講。我個(ge) 人認為(wei) 造成這個(ge) 差異的原因,第一個(ge) 是基本上所有的公司,從(cong) 初創公司到全球百強,都有對軟件工程師的需求。現在哪個(ge) 公司不需要幾個(ge) 碼農(nong) 來開發app,或者做個(ge) web。但是做硬件這種工作並不是所有公司會(hui) 去做的。舉(ju) 個(ge) 簡單的例子,摩根大通銀行在我們(men) 學校的招聘會(hui) 上明確招軟件工程師,expedia也明確招聘軟件工程師,如果這個(ge) 兩(liang) 個(ge) 公司突然說要招電子工程師,這不是逗我嗎。。而且哪怕是硬件公司,也需要大量的軟件工程師來支持硬件前端工作。
第二點我覺得要歸功於(yu) 現在的創業(ye) 潮。不管在美國在中國互聯網創業(ye) 都是趨勢,但是可以說絕大部分的初創互聯網公司做的都是軟件方向。有個(ge) 點子,有點技術,找幾個(ge) 合夥(huo) 人抱著電腦就能開幹了。但是初創公司要專(zhuan) 注做硬件開發就比較難了,因為(wei) 成立設計硬件公司的門檻和起步開銷比較大。所以這也導致大部分初創公司以互聯網為(wei) 主,能做的了硬件設計的公司基本上都是處於(yu) 壟斷地位的大企業(ye) 。
第三個(ge) 很重要的原因就是硬件設計在現在來看已經是相對成熟的技術,我甚至有ee的同學跟我說大部分硬件的東(dong) 西已經步入夕陽產(chan) 業(ye) 的範疇,因為(wei) 很多東(dong) 西已經成了規範,也因為(wei) 很多東(dong) 西被自動化所取代。前一陣子全球大牌的硬件公司才裁了不少人,intel更是裁掉了接近20%的硬件工程師。但是互聯網熱從(cong) 90年代開始到現在熱頭還沒過,而且未來諸多產(chan) 業(ye) 如人工智能、機器學習(xi) 、圖像識別、大數據都才剛起步,所以還有一定的上升空間。
還記得當初我們(men) 學校的初創公司招聘會(hui) 上幾十家公司隻有一家招硬件工程師,而且還是偏軟件的硬件工程師,剩下的公司裏98%都在找會(hui) 碼代碼的人;大企業(ye) 的招聘會(hui) 上才能見到nvidia、arm、 intel、 TI 的身影,但是哪怕是這樣,基本上所有的公司招牌上都會(hui) 有大寫(xie) 加粗的招computer science的字樣。
再從(cong) 個(ge) 人的角度來講。想成為(wei) 一名軟件工程師找到工作的門檻遠比成為(wei) 一名合格的硬件工程師低很多。要想以軟件工程師的身份混到個(ge) 飯碗,學兩(liang) 門語言學好,常用的數據結構,刷點題就基本上能找到薪水小幾千的崗位。我甚至知道國內(nei) 有專(zhuan) 門的軟件工程師培訓機構,那種專(zhuan) 門教java和算法,兩(liang) 個(ge) 月速成班,而且所聲稱的學生就業(ye) 率還挺高的。
但是要想成為(wei) 一名合格的硬件工程師,不是科班出身的不好好學幾門模電數電信號邏輯設計的課,沒有在學校實驗室裏自己焊點電路做實踐,連簡曆都發不出去。而且現在要想學個(ge) 什麽(me) 語言框架,網上搜一搜“”xxx語言入門教程“”就有非常豐(feng) 富的資源,但是要是在網上搜“如何學好超大規模集成電路設計”,要想找到可以受用的資源幾乎是不可能的。而且就我所參加的招聘會(hui) 來說,如果有招硬件工程師基本都要求有研究生的學位,但是對軟件工程師的要求基本上就是熟悉算法數據結構,會(hui) web編程有相關(guan) 經曆就夠了。
軟件工程師很多時候吃的是體(ti) 力,硬件工程師大部分時候是吃經驗,所以硬件工程師一般得有一定的經曆積澱才能脫穎而出。尤其像模電這種上手程度很高的方向,沒個(ge) 十年八年的相關(guan) 經驗根本不算學成出師。所以說本身對從(cong) 業(ye) 者的資質要求更高,也是硬件工程師不好找工作的原因之一。
上麵是我所認為(wei) 的短時間內(nei) 軟件工程師就找工作方麵來說會(hui) 比硬件工程師更容易的原因。但是這並不意味著會(hui) 編程就肯定找得到工作,也不意味著硬件產(chan) 業(ye) 就會(hui) 低迷下去。軟件工程師的職位多,但是每年從(cong) 事這個(ge) 職業(ye) 的人也更多,雖然我認為(wei) 現在軟件工程師短期內(nei) 還沒有出現飽和的趨勢(畢竟那麽(me) 高的工資還擺在那),但是總有一天這個(ge) 行業(ye) 也會(hui) 像金融產(chan) 業(ye) 一樣降溫(人才供過於(yu) 求)。
硬件產(chan) 業(ye) 雖然大部分已經有步入夕陽產(chan) 業(ye) 的趨勢,但是曾經一度被宣稱沒啥好搞的供電網絡最近也被smart grid搞得神乎其神,美國top5的高校都還設立了相關(guan) 實驗室。此外,現在物聯網,車聯網,智能家居的概念被炒得火熱,我相信等相關(guan) 成熟的支持技術(能量采集,低功耗通信)以及統一的開發平台一旦出現,硬件工程師的需求隻會(hui) 更多,雖然這些產(chan) 品依舊隻有那些有背景的大公司才做得動(不過因為(wei) 歐美國家電子產(chan) 業(ye) 上的封鎖,國家也在硬件設計上砸了很多銀子,初創企業(ye) 也會(hui) 慢慢增加,相信國內(nei) 的相關(guan) 機遇也會(hui) 更多)。而且畢竟軟件產(chan) 業(ye) 還是依靠硬件,如何設計低功耗,高穩定性,能夠承載大吞吐量計算量的硬件也是這個(ge) 產(chan) 業(ye) 的挑戰,畢竟人工智能,機器學習(xi) ,視覺處理等領域是很吃硬件計算量的。沒有強大的硬件支持,阿狗要想打敗李世乭還是癡心妄想吧。
本人現在在一家為(wei) 硬件的公司設計軟件的百強軟件公司實習(xi) ,做的工作大部分還是偏軟件,所以本身對工作常態也並沒有非常深入的自己的感受。但是就我觀察身邊的同事以及跟別人的交流來看,不管是做軟件硬件,都是要:對著電腦。
軟件工程師平時就是上班啊調試程序,比較低級的碼農(nong) 隻能給高級軟件工程師打打下手,幫他們(men) 做測試,實現他們(men) 設計好的東(dong) 西。當然做到高級工程師了才有能力開發設計自己公司的產(chan) 品。
如果在初創公司工作節奏更緊張,如果趕上產(chan) 品要上線可能需要加班調試。遇到程序爆炸了可能還需要on call(就是你負責的東(dong) 西突然出問題了,你的manager直接打個(ge) 電話給你,你得馬上去公司修bug),至少我知道amazon是有這個(ge) 機製。 我現在還沒有在純做硬件的公司實習(xi) 過,但是從(cong) 我知道的事實來看,硬件工程師不會(hui) 比軟件工程師輕鬆。硬件工程師也需要調試電路啊調試腳本啊,反正也有跟軟件工程師交叉的工作。工作環境取決(jue) 於(yu) 細分的工作類別。開發FPGA的估計跟碼農(nong) 一樣坐辦公室,搞MEMS的、嵌入式的就長期入駐實驗室了。因為(wei) 大部分硬件公司都是相對成熟的大企業(ye) ,所以工作節奏普遍不會(hui) 像在初創公司那麽(me) 緊張,不過像在華為(wei) 這樣的企業(ye) 就另說了。
當然不管是軟件工程師還是硬件工程師,工作強度應該都是高於(yu) 其他industry的職業(ye) 的。畢竟這個(ge) 行業(ye) 競爭(zheng) 會(hui) 越來越激烈,這也是聰明人聚集的地方。 至於(yu) 工資的話,就平均來講,美國這裏的軟件工程師年薪會(hui) 略高於(yu) 硬件工程師(從(cong) glassdoor以及其他門戶的數據來看),但是軟件工程師一樣也有收入低的,硬件工程師的收入也有碾壓軟件工程師的。隻要你技術過硬,薪水都不是事兒(er) 。
有人說軟件工程師前景更開闊一些,我個(ge) 人的感覺是不管怎樣,這兩(liang) 個(ge) 行業(ye) 在未來都會(hui) 有非常非常多的機遇與(yu) 挑戰(詳細原因見第一點)。不管是軟件設計還是硬件設計,底下都有更多細小的分支(比如說你硬件設計是想做vlsi,dsp,處理器設計,通信,fpga開發還是嵌入式,軟件設計你想做web開發,app開發,軟件開發,嵌入式軟件工程師,操作係統還是distributed system)。 我個(ge) 人是對兩(liang) 個(ge) 大方向都很有興(xing) 趣,但是我決(jue) 定自己最終的方向還是嵌入式設計和處理器設計,這兩(liang) 個(ge) 行業(ye) 都應該算是夾在了純硬件設計和純軟件設計的中間。
尤其是產(chan) 業(ye) 對嵌入式工程師的要求更高,能夠自己設計mixed signal pcb,自己調試應用代碼寫(xie) kernel code,能調試無線通信,基本意味著一個(ge) 合格的嵌入式工程師要對硬件和軟件相關(guan) 方麵有足夠的知識。我自己是比較討厭做web開發app純開發軟件的工作,因為(wei) 這些工作的門檻太低,不是科班出身的人可能都能混的比你好得多,體(ti) 現不出來自己的價(jia) 值。而且我比較喜歡把電路板和各種元件握在手裏的感覺,而且我發現自己能夠設計一個(ge) 可以用的硬件的時候那種成就感會(hui) 高於(yu) debug之後的成就感。當你發現自己在經受了大學的磨練真正擁有了學習(xi) 知識的能力以後,豐(feng) 富的網上資源以及自身的積累都會(hui) 讓你學習(xi) 這些網頁app知識非常輕鬆,所以我個(ge) 人更喜歡硬件底層,以及和硬件底層打交道的軟件領域。
軟件硬件的課程都不會(hui) 簡單,而且兩(liang) 個(ge) 學科的工作量不是其他學科能比的(學工科的天天做project呆lab,學統計的上完課就回家看電影。。)所以要想學好,還是需要花一定精力,尤其美國的大學工科院係workload相對國內(nei) 高校來說有增無減。確定這是你想要的,再給予考慮。
成為(wei) 高級嵌入式係統硬件工程師要具備的技能
對於(yu) 硬件來講有幾個(ge) 方向,就單純信號來分為(wei) 數字和模擬,模擬比較難搞,一般需要很長的經驗積累,單單一個(ge) 阻值或容值的精度不夠就可能使信號偏差很大。因此年輕人搞的較少,隨著技術的發展,出現了模擬電路數字化,比如手機的Modem射頻模塊,都采用成熟的套片,而當年國際上隻有兩(liang) 家公司有此技術,自我感覺模擬功能不太強的人,不太適合搞這個(ge) ,如果真能搞定到手機的射頻模塊,隻要達到一般程度可能月薪都在15K以上。
另一類就是數字部分了,在大方向上又可分為(wei) 51/ARM的單片機類,DSP類,FPGA類, 國內(nei) FPGA的工程師大多是在IC設計公司從(cong) 事IP核的前端驗證,這部分不搞到門級,前途不太明朗,即使做個(ge) IC前端驗證工程師,也要搞上幾年才能勝任。 DSP硬件接口比較定型,如果不向驅動或是算法上靠攏,前途也不會(hui) 太大。
而ARM單片機類的內(nei) 容就較多,業(ye) 界產(chan) 品占用量大,應用人群廣,因此就業(ye) 空間極大,而硬件設計最體(ti) 現水平和水準的就是接口設計這塊,這是各個(ge) 高級硬件工程師相互PK,判定水平高低的依據。
而接口設計這塊最關(guan) 鍵的是看時序,而不是簡單 的連接,比如PXA255處理器I2C要求速度在100Kbps,如果把一個(ge) I2C外圍器件,最高還達不到100kbps的與(yu) 它相接,必然要導致設計的失 敗。這樣的情況有很多,比如51單片機可以在總線接 LCD,但為(wei) 什麽(me) 這種LCD就不能掛在ARM的總線上,還有ARM7總線上可以外接個(ge) Winband的SD卡控製器,但為(wei) 什麽(me) 這種控製器接不到ARM9或 是Xscale處理器上,這些都是問題。因此接口並不是一種簡單的連接,要看時序,要看參數。
一個(ge) 優(you) 秀的硬件工程師應該能夠在沒有參考方案的前提下設計 出一個(ge) 在成本和性能上更加優(you) 秀的產(chan) 品,靠現有的方案,也要進行適當的可行性裁剪,但不是胡亂(luan) 的來,我遇到一個(ge) 工程師把方案中的5V變1.8V的DC芯片, 直接更換成LDO,有時就會(hui) 把CPU燒上幾個(ge) 。
前幾天還有人希望我幫忙把他們(men) 以前基於(yu) PXA255平台的手持GPS設備做下程序優(you) 化,我問了一下情況,地 圖是存在SD卡中的,而SD卡與(yu) PXA255的MMC控製器間采用的SPI接口,因此導致地圖讀取速度十分的慢,這種情況是設計中嚴(yan) 重的缺陷,而不是程序 的問題,因此我提了幾條建議,讓他們(men) 更新試下再說。
因此想成為(wei) 一個(ge) 優(you) 秀的工程師,需要對係統整體(ti) 性的把握和對已有電路的理解,換句話說,給你一套電路圖你 終究能看明白多少,看不明白80%以上的話,說明你離優(you) 秀的工程師還差得遠哪。其次是電路的調試能力和審圖能力,但最最基本的能力還是原理圖設計PCB繪 製,邏輯設計這塊。這是指的硬件設計工程師,從(cong) 上麵的硬件設計工程師中還可以分出ECAD工程師,就是專(zhuan) 業(ye) 的畫PCB板的工程師,和EMC設計工程師,幫 人家解決(jue) EMC的問題。
硬件工程師再往上就是板級測試工程師,就是C語功底很好的硬件工程師,在電路板調試過程中能通過自已編寫(xie) 的測試程序對硬件功能進行 驗證。然後再交給基於(yu) 操作係統級的驅動開發人員。
總之,硬件的內(nei) 容很多很雜,硬件那方麵練成了都會(hui) 成為(wei) 一個(ge) 高手,我時常會(hui) 給人家做下方案評估,很多高級硬件工程師設計的東(dong) 西,經常被我一句話否定,因此工程師做到我這種地步,也會(hui) 得罪些人,但硬件的確會(hui) 有很多不為(wei) 人知的東(dong) 西,讓很多高級硬件工程師也摸不到頭腦。
那麽(me) 高級硬件件工程師技術技能都要具備那些東(dong) 西哪,首先要掌握EDA設計的輔助工具類如 Protel\ORCAD\PowperPCB\Maplux2\ISE、VDHL語言,要能用到這些工具畫圖畫板做邏輯設計,再有就是接口設計審圖能力,再者就是調試能力,如果能走到總體(ti) 方案設計這塊,那就基本上快成為(wei) 資深工程師了。
高級硬件工程師不僅(jin) 要有設計能力還有具有相當深厚的基本功,就是EDA工具的使用,EDA工程師包括原理圖和PCB工具,邏輯設計工具和VHDL
SCH有Cadence下的Orcad 和Mentors公司pads下的powerpcb.
當然protel也具有這兩(liang) 部分功能但它在國際上不通用。隻是國內(nei) 通用。如果想走得高些或到台資、日資、美資公司及國內(nei) 需要對外交流的大公司的話,上麵的硬件的原理圖工具和PCB工資必須掌握的。邏輯這塊,硬件工程師主要是負責CPLD這塊,涉及FPGA這塊時應該會(hui) 有專(zhuan) 業(ye) FPGA人員來搞定的,因FPGA不太適合做邏輯的。因此硬件工程師隻到CPLD為(wei) 止。
硬件是要靠經驗,也要靠積累的,十年磨一劍,百年磨一針。