天天看點

嵌入式人才的發展方向,給從事嵌入式開發的同學指路

  嵌入式系統無疑是目前最熱門最有發展前途的IT應用領域之一。嵌入式系統用在一些特定專用裝置上,通常這些裝置的硬體資源(如處理器、存儲器等)非常有限,并且對成本很敏感,有時對實時響應要求很高等。特别是随着消費家電的智能化,嵌入式更顯重要。像我們平常常見到的手機、PDA、電子字典、可視電話、VCD/DVD/MP3 Player、數字相機(DC)、數字錄影機(DV)、U-Disk、機頂盒(Set Top Box)、高清電視(HDTV)、遊戲機、智能玩具、交換機、路由器、數控裝置或儀表、汽車電子、家電控制系統、醫療儀器、航天航空裝置等等都是典型的嵌入式系統。

         嵌入式系統是軟硬結合的東西,搞嵌入式開發的人有兩類。

         一類是學電子工程、通信工程等偏硬體專業出身的人,他們主要是搞硬體設計,有時要開發一些與硬體關系最密切的最底層軟體,如BootLoader、Board Support Package(像PC的BIOS一樣,往下驅動硬體,往上支援作業系統),最初級的硬體驅動程式等。他們的優勢是對硬體原理非常清楚,不足是他們更擅長定義各種硬體接口,但對複雜軟體系統往往力不從心(例如嵌入式作業系統原理和複雜應用軟體等)。

        另一類是學軟體、計算機專業出身的人,主要從事嵌入式作業系統和應用軟體的開發。如果我們學軟體的人對硬體原理和接口有較好的掌握,我們完全也可寫BSP和硬體驅動程式。嵌入式硬體設計完後,各種功能就全靠軟體來實作了,嵌入式裝置的增值很大程度上取決于嵌入式軟體,這占了嵌入式系統的最主要工作(目前有很多公司将硬體設計包給了專門的硬體公司,稍複雜的硬體都交給台灣或國外公司設計,國内的硬體設計力量很弱,很多嵌入式公司自己隻負責開發軟體,因為公司都知道,嵌入式産品的差異很大程度在軟體上,在軟體方面是最有“花頭“可做的),是以我們搞軟體的人完全不用擔心我們在嵌入式市場上的用武之地,越是智能裝置越是複雜系統,軟體越起關鍵作用,而且這是目前的趨勢。

        從事嵌入式軟體開發的好處是:

     (1)目前國内外這方面的人都很稀缺。一方面,是因為這一領域入門門檻較高,不僅要懂較底層軟體(例如作業系統級、驅動程式級軟體),對軟體專業水準要求較高(嵌入式系統對軟體設計的時間和空間效率要求較高),而且必須懂得硬體的工作原理,是以非專業IT人員很難切入這一領域;另一方面,是因為這一領域較新,目前發展太快,很多軟硬體技術出現時間不長或正在出現(如ARM處理器、嵌入式作業系統、MPEG技術、無線通信協定等),掌握這些新技術的人當然很找。嵌入式人才稀缺,身價自然就高,越有經驗價格就越高。其實嵌入式人才稀少,根本原因可能是大多數人無條件接觸,這需要相應的嵌入式開發闆和軟體,另外需要有經驗的人進行指導開發流程。

     (2)與企業計算等應用軟體不同,嵌入式領域人才的工作強度通常低一些(但收入不低)。搞企業應用軟體的IT企業,這個使用者的系統搞完了,又得去搞下一個使用者的,而且每個使用者的需求和完成時間都得按客戶要求改變,往往疲于奔命,重複勞動。相比而言,搞嵌入式系統的公司,都有自己的産品計劃,按自己的節奏行事。所開發的産品通常是通用的,不會因客戶的不同而修改。一個産品型号開發完了,往往有較長一段空閑時間(或隻是對軟體進行一些小修補),有時間進行充電和休整。另外,從事嵌入式軟體的每個人工作範圍相對狹窄,所涉及的專業技術範圍就是那些(ARM、RTOS、MPEG、802.11等),時間長了這些東西會越搞越有經驗,賣賣老本,幾句指導也夠讓那些初入道者琢磨半年的。若搞應用軟體,可能下一個客戶要換成一個完全不同的軟體開發平台,那就苦了。

     (3)哪天若想創業,搞自已的産品,那麼嵌入式是一個不錯的主意,這可不像應用軟體那樣容易被盜版。土木學院有一個叫啟明星的公司開發出一個好象叫“工程e”的掌上PDA(南校區門口有廣告),施工技術人員用該PDA可當場進行土木概預算和其它土木計算,據說銷路特好。我認識的某大學老師,他開發的飯館用的點菜PDA(WinCE平台,可無線連網和上網),據他說銷路不錯,飯館點點PDA讓客戶點菜,多顯派頭檔次。我記得00級2+2班當年有一組同學在學Windows程式設計課程時用VC++設計了一個功能很強的點菜系統做為課程項目,當時真想建議他們将這個軟體做成PDA,估計會有些銷路(上海火車站南廣場的Macdonald便使用很漂亮的PDA給使用者點食品,像模像樣的)。這些PDA的硬體設計一般都是請其它公司給訂做(這叫“貼牌”:OEM),都是通用的硬體,我們隻管設計軟體就變成自己的産品了。

       從事嵌入式軟體開發的缺點是:

     (1)入門起點較高,所用到的技術往往都有一定難度,若軟硬體基礎不好,特别是作業系統級軟體功底不深,則可能不适于此行。

    (2)這方面的企業數量要遠少于企業計算類企業。特别是從事嵌入式的小企業數量較多(小企業要搞自己的産品創業),知名大公司較少(搞嵌入式的大公司主要有Intel、Motorola、TI、Philip、Samsung、Sony、Futjtum、Bell-Alcatel、意法半導體、Microtek、研華、華為、中興通信、上廣電等制造類企業)。這些企業的習慣思維方式是到電子、通信等偏硬專業找人。

   (3)有少數公司經常要碩士以上的人搞嵌入式,主要是基于嵌入式的難度。但大多數公司也并無此要求,隻要有經驗即可。

同學若學習嵌入式,顯然應偏重于嵌入式軟體,特别是嵌入式作業系統方面。對于搞嵌入式軟體的人,最重要的技術顯然是(實際上很多公司的招聘廣告上就是這樣寫的):

  • 掌握主流嵌入式微處理器的結構與原理
  • 必須掌握一個嵌入式作業系統 
  • 必須熟悉嵌入式軟體開發流程并至少做過一個嵌入式軟體項目

       嵌入式軟體方面最重要的課程包括:

     (1)嵌入式微處理器結構與應用

        這是一門嵌入式硬體基礎課程,我院用這門課取代了傳統的“微機原理與接口”課程(目前國内已有少部分高校IT專業這樣做了,因為講x86微機原理與接口很難找到實際用處,隻為教學而已)。我們說過,嵌入式是軟硬體結合的技術,搞嵌入式軟體的人應對ARM處理器工作原理和接口技術有充分了解,包括ARM的彙編指令系統。若不了解處理器原理,怎麼能控制硬體工作,怎麼能寫出節省記憶體又運作高速的最優代碼(嵌入式軟體設計特别講究時空效率),怎麼能寫出驅動程式(驅動程式都是與硬體打交道的)?很多公司招聘嵌入式軟體人員時都要求熟悉ARM處理器,将來若同學到公司中從事嵌入式軟體開發,公司都會給你一本該裝置的硬體規格說明書 (xxx Specification),您必須能看懂其中的記憶體分布和端口使用等最基本的說明(就像x86彙編一樣),否則怎麼設計軟體。

        有些同學覺得嵌入式處理器課程較枯燥,這主要是硬體課程都較抽象的原因,等我們的嵌入式實驗室10月份建好後,您做了一些實驗後就會覺得看得見摸得着。還有同學對ARM彙編不感興趣,以為嵌入式開發用C語言就足夠了。其實不應僅是将彙編語言當成一個程式設計語言,學彙編主要是為了掌握處理器工作原理的。一個不熟悉彙編語言的人,怎麼能在該處理器寫出最優的C語言代碼。在嵌入式開發的一些關鍵部分,有時還必須寫彙編,如Bootloader等(可能還包括BSP)。特别是在對速度有極高要求的場合(如DSP處理器的高速圖像采集和圖像解壓縮),目前主要還要靠彙編寫程式(我看到過很多公司是這樣做的)。當您在一個嵌入式公司工作時,在檢視描述原理的手冊時,可能很多都是用彙編描述的(我就遇到過),這是因為很多硬體設計人員隻會寫或者喜歡用彙編描述,此時您就必須看懂彙程式設計式,否則軟硬體人員可能就無法交流。很多嵌入式職位招聘時都要求熟悉彙編。

        (2) 嵌入式作業系統類課程

        除了WinCE的實時性稍差外,大多數嵌入式作業系統的實時性都很強,是以也可稱為實時作業系統Real Time Operating System.從事嵌入式的人至少須掌握一個嵌入式作業系統(當然掌握兩個更好),這在嵌入式的所有技術中是最為關鍵的了。目前最重要的RTOS         主要包括:

        第一類、傳統的經典RTOS:最主要的便是Vxworks作業系統,以及其Tornado開發平台。Vxworks因出現稍早,實時性很強(據說可在1ms内響應外部事件請求),并且核心可極微(據說最小可8K),可靠性較高等,是以在北美,Vxworks占據了嵌入式系統的多半疆山。特别是在通信裝置等實時性要求較高的系統中,幾乎非Vxworks莫屬。Vxworks的很多概念和技術都和Linux很類似,主要是C語言開發。像Bell-alcatel、Lucent、華為等通信企業在開發産品時,Vxworks用得很多。但Vxworks因價格很高,是以一些小公司或小産品中往往用不起。目前很多公司都在往嵌入式Linux轉(華為、中興以及UT目前正在這樣轉)。但無論如何,Vxworks在一段長時間内仍是不可動搖的。與Vxworks類似的稍有名的實時作業系統還有pSOS、QNX、Nucleus等RTOS。

        第二類、嵌入式Linux作業系統:Linux的前途除作為伺服器作業系統外,最成功的便是在嵌入式領域的應用,原因當然是免費、開源、支援軟體多、呼擁者衆,這樣嵌入式産品成本會低。Linux本身不是一個為嵌入式設計的作業系統,不是微核心的,并且實時性不強。目前應用在嵌入式領域的Linux系統主要有兩類:一類是專為嵌入式設計的已被裁減過的Linux系統,最常用的是uClinux(不帶MMU功能),目前占較大應用份額,可在ARM7上跑;另一類是跑在ARM 9上的,一般是将Linux 2.4.18核心移植在其上,可使用更多的Linux功能(當然uClinux更可跑在ARM 9上)。很多人預測,嵌入式Linux預計将占嵌入式作業系統的50%以上份額,非常重要。缺點是熟悉Linux的人太少,開發難度稍大。另外,目前我們能發現很多教材和很多大學都以ucOS/II為教學用實時作業系統,這主要是由于ucOS/II較簡單,且開源,非常适合入門者學習實時作業系統原理,但由于ucOS/II功能有限,實用用得較少,是以我院不将其作為教學重點,要學習就應學直接實用的,比如uClinux就很實用。況且熟悉了Linux開發,不僅在嵌入式領域有用,對開發Linux應用軟體,對加深作業系統的認識也有幫助,可謂一舉多得。據我所知,目前Intel、Philip都在大搞ARM+LINUX的嵌入式開發,Fujitum則是在自己的處理器上大搞Linux開發。目前在嵌入式Linux領域,以下幾個方面的人特别難找,一是能将Linux移植到某個新型号的開發版上;二是能寫Linux驅動程式的人;三是熟悉Linux核心裁減和優化的人。

       第三類、 Windows CE嵌入式作業系統:Microsoft也看準了嵌入式的巨大市場,MS永遠是最厲害的,WinCE出來隻有幾年時間,但目前已占據了很大市場佔有率,特别是在PDA、手機、顯示儀表等界面要求較高或者要求快速開發的場合,WinCE目前已很流行(據說有一家賣工控機的公司闆子賣得太好,以至來不及為客戶裁減WinCE)。WinCE目前主要為4.2版(.NET),開發平台主要為WinCE Platform Builder,有時也用EVC環境開發一些較上層的應用,對于急于完成,不想拿嵌入式Linux冒險的開發場合,       WinCE是最合适了(找嵌入式Linux的人可沒那麼好找的),畢竟公司不能像學生學習那樣試試看,保證開發成功更重要。根據不同的側重點 ,WinCE還有兩個特殊版本,一個是MS PocketPC作業系統專用于PDA上(掌上電腦),另一個是MS SmartPhone作業系統用于智能手機上(帶PDA功能的手機),兩者也都屬于WinCE平台。在PDA和手機市場上,除WinCE外,著名的PDA嵌入式作業系統還有Palm OS(因出現很早,很有名)、Symbian等,但在WinCE的強勁沖擊下,Palm和Symbian來日還能有多長?

        總結關于嵌入式作業系統類課程,若您覺得自己功底較深且能鑽研下去,則可去學嵌入式Linux;若您覺得自己VC++功底較好且想短平快地學嵌入式開發,WinCE是最好的選擇。

       (3) 嵌入式開發的其它相關軟體課程

       搞嵌入式若能熟悉嵌入式應用的一些主要領域,這樣的人更受企業歡迎。主要的相關領域包括:

  • 數字圖像壓縮技術:這是嵌入式最重要最熱門的應用領域之一,主要是應掌握MPEG編解碼算法和技術,如DVD、MP3、PDA、高精電視、機頂盒等都涉及MPEG高速解碼問題。
  • 通信協定及程式設計技術:這包括傳統的TCP/IP協定和熱門的無線通信協定。首先,大多數嵌入式裝置都要連入區域網路或Internet,是以首先應掌握TCP/IP協定及其程式設計,這是需首要掌握的基本技術;其次,無線通信是目前的大趨勢,是以掌握無線通信協定及程式設計也是是很重要的。無線通信協定包括無線區域網路通信協定802.11系列,Bluetooth,以及移動通信(如GPRS、GSM、CDMA等)。
  • 網絡與資訊安全技術:如加密技術,數字證書CA等。我院有這方面的選修課。
  • DSP技術:DSP是Digital Signal Process數字信号處理的意思,DSP處理器通過硬體實作數字信号處理算法,如高速資料采集、壓縮、解壓縮、通信等。數字信号處理是電子、通信等硬體專業的課程,對于搞軟體的人若能了解一下最好。目前DSP人才較缺。如果有信号與系統、數字信号處理等課程基礎,對于學習MPEG編解碼原理會有很大幫助。

     (4)嵌入式開發的相關硬體基礎

        對于軟體工程專業的學生,從事嵌入式軟體開發,像數字電路、計算機組成原理、嵌入式微處理器結構等硬體課程是較重要的。另外,彙編語言、C/C++、資料結構和算法、特别是作業系統等軟體基礎課也是十分重要的。主要目地是能看懂硬體工作原理,但重點應是在嵌入式軟體,特别作業系統級軟體。

        研究所學生裡有些是學電子、通信類專業過來的,有較好的模拟電路和單片機基礎,學嵌入式非常合适。嵌入式本身就是從單片機發展過來的,隻是單片機不帶OS,而現在很多嵌入式應用越來越複雜,以至不得不引入嵌入式作業系統。另外,為追求更高速的信号處理速度,現在在一些速度要求較高的場合,有不少公司是将一些DSP算法,如MPEG壓縮解壓縮算法等用硬體來實作,這就涉及到HDL數字電路設計技術及其FPGA/IP核實作技術,這方面的人目前市場上也很缺。

        題外話

        能寫驅動程式的人目前是非常緊缺的(驅動程式也可歸于嵌入式範疇),包括桌面Windows中的DDK開發環境和WDM驅動程式。公司每時每刻都要推出新産品,每一個新産品出來了,要能被作業系統所使用,是必須寫驅動程式的。寫驅動程式就必須掌握作業系統(如Windows或Linux)的内部工作原理,還涉及到少量硬體知識,難度較大,是以這方面的人很難找。想成為高手的同學,也可從驅動程式方面獲得突破。

        我可說一下自己的經曆,三年前我曾短暫地在一家公司寫過WinCE驅動程式(正是因為知道這方面的人緊缺,是以才要做這方面的事),盡管那以前從未做過驅動程式,應聘那個職位時正是看準了公司是很難招聘到這方面的人,既然都找不到人,驅動還得有人做,這正是可能有機會切入這一領域的大好機會。面試時大講自己寫過多少萬行彙程式設計式,對計算機工作原理如何清楚,履歷中又寫着我曾閱讀完兩本關于Windows Driver Model的兩本英文原版書,寫過幾個小型的驅動程式練習程式(其實根本沒寫過,我們的同學将來千萬不要像我這樣,早練就些過硬功夫,就不至于淪落到我這等地步,就不用像我那樣去“欺騙”公司了,我這是一個典型的反面教材),居然一切都PASS(當然最重要的是筆試和面試問題還說得過去),這隻能說明這一領域找人的困難程度。公司本就未指望找到搞過驅動的人,找個有相關基礎的人就算不錯了。做了以後,發現也并不是怎樣難的。其實搞驅動程式的工作是很舒服的,搞完一個版本就會空一段時間,隻有等公司新的晶片推出或新的OS出現後,才需要再去開發新一版驅動,那時有将近一個月時間空閑着在等WinCE .NET Beta版推出,準備将驅動程式更新到CE .NET上,現在在軟體學院工作整日忙,無限懷念那段悠閑時光。

        很巧合,最近本人無意中再次體會到了嵌入式的迷人之處。上周我那用了3年的手機終于不能WORK了。此次更新,除要求有手機常見功能外,最好有MP3功能(現在很多英語聽力都有MP3檔案),最好有英漢詞典,最好還能讀WORD文檔。最後選了個滿足以上條件的最便宜的手機DOPOD 515(斬了我2.2K,但想想這也算自己對嵌入式事業的支援,這樣便也想開了),算得上最低檔的智能手機了。回來一查,手機的about顯示,本手機Processor是ARM,其OS是MS Smartphone(即WinCE .NET 4.2),這麼巧合,簡直可做為學習嵌入式課程的産品案例了(等我們的WinCE課程開得有聲有色後,希望能從微軟研究院搞些Smartphone來開發開發)。有OS的手機果然了得,金山詞霸、WORD、EXCEL、REGEDIT等居然都有smartphone版的,PC上的MP3、DOC等居然在download時都可被自動轉換成smartphone格式,真是爽。完全可用Windows CE自己開發一些需要的程式download到自己的手機上。現在市面銷售PDA智能手機火爆,MS總是财源滾滾。但我已發現國産的ARM+LINUX手機出現在市面上,價格隻1.2K。

         在GOOGLE網上能搜尋太多的關于嵌入式系統的讨論了,我剛發現一個http://www.embyte.com非常不錯,有很多有經驗者談自己的體會,投入到其中的論壇中,你會切身感到嵌入式學習的熱潮。

要麼走ARM+WinCE,要麼走ARM+LINUX,要麼走ARM+VXWORKS。每個搞嵌入式的人都可選一條路,條條大路通羅馬。