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