嵌入式系統無疑是目前最熱門、最有前景的IT應用領域之壹,比如普通手機、PDA、機頂盒、高清電視(HDTV)、路由器、汽車電子、醫療儀器、航空航天設備等等。目前國內嵌入式系統發展最大的制約因素是人才短缺,這主要是因為兩個原因:壹是與我國高校的專業設置有關。我們大學的計算機教育壹般以應用軟件為主,很少涉及嵌入式軟件課程,所以企業很難招到能馬上投入嵌入式軟件開發的實用型人才;二是嵌入式領域門檻比較高,知識要求比較全面,需要壹定的實驗環境(開發板和工具軟件)和有經驗的人來指導。嵌入式系統主要基於LINUX操作系統下的C開發,在ARM9(目前企業最流行的開發平臺)下開發,當然還有WINCE操作系統。
所以嵌入式系統最常用的編程語言是C語言和匯編語言(主要用於單片機的開發)。
嵌入式系統,IEEE定義為:嵌入式系統是用來控制、監視或輔助設備、機器或工廠運行的裝置。嵌入式系統是“控制、監視或輔助機器和設備運行的裝置”。
在國內的嵌入式系統領域,公認的嵌入式系統概念是:嵌入式系統以應用為中心,以計算機技術為基礎,軟硬件可裁剪,適用於對功能、可靠性、成本、體積、功耗有嚴格要求的專用計算機系統。它壹般由嵌入式微處理器、外圍硬件設備、嵌入式操作系統和用戶應用程序組成,用於控制、監視或管理其他設備。
嵌入式系統壹般指非PC系統,包括硬件和軟件。硬件包括處理器/微處理器、內存和外圍設備、I/O端口、圖形控制器等。軟件部分包括操作系統軟件(OS)(要求實時多任務運行)和應用程序設計。有時候設計師會把這兩種軟件結合起來。應用程序控制系統的操作和行為;操作系統控制應用程序和硬件之間的交互。
嵌入式系統的核心是嵌入式微處理器。嵌入式微處理器壹般具有以下四個特征:
1)對實時多任務支持能力強,能完成多任務,中斷響應時間短;從而將內部代碼和實時內核的執行時間降至最低。
2)具有強大的存儲區域保護功能。這是因為嵌入式系統的軟件結構已經模塊化,為了避免軟件模塊之間的錯誤交叉動作,需要設計強大的存儲區保護功能,這也有利於軟件診斷。
3)可擴展的處理器結構,以最快的速度開發出能滿足應用最高性能的嵌入式微處理器。
4)嵌入式微處理器必須具有低功耗,尤其是便攜式無線和移動計算及通信設備中使用的電池供電的嵌入式系統,必要時功耗僅為mW甚至μW。
與通用計算機系統相比,嵌入式計算機系統具有以下特點:
1.嵌入式系統通常是面向應用的嵌入式CPU。嵌入式CPU與通用CPU的最大區別在於,它們大多工作在為特定用戶群設計的系統中。它們通常具有低功耗、小尺寸、高集成度的特點,可以將通用CPU中板卡完成的許多任務集成到芯片中,有利於嵌入式系統設計的小型化,大大增強移動性,與網絡的耦合更加緊密。
2.嵌入式系統是先進的計算機技術、半導體技術和電子技術與各行業具體應用相結合的產物。這就決定了它必須是壹個技術密集型、資本密集型、高度分散的創新型知識集成系統。
3.嵌入式系統的硬件和軟件必須進行高效率、量身定制和冗余的設計,力求在相同的矽片面積上實現更高的性能,這樣在具體應用中處理器的選擇上才更有競爭力。
4.嵌入式系統與具體應用有機結合,其升級也與具體產品同步,所以嵌入式系統產品壹旦進入市場,生命周期較長。
5.為了提高執行速度和系統可靠性,嵌入式系統中的軟件壹般固化在存儲芯片或單片機本身,而不是存儲在磁盤等載體中。
6.嵌入式系統本身不具備bootstrap開發能力。即使設計完成後,用戶通常也不能修改其中的程序功能。只能開發壹套開發工具和環境。
嵌入式系統壹般指非PC系統,具有計算機功能,但不稱為計算機設備或設備。它是以應用為中心,軟硬件靈活,滿足應用系統對功能、可靠性、成本、體積、功耗等全面而嚴格的要求的專用計算機系統。簡單來說,嵌入式系統集成了系統的應用軟件和硬件,類似於PC中BIOS的工作模式。它具有軟件代碼小、自動化程度高、響應速度快的特點,特別適用於要求實時性和多任務的系統。嵌入式系統主要由嵌入式處理器、相關支持硬件、嵌入式操作系統和應用軟件系統等組成。它是壹個可以獨立工作的“裝置”。
嵌入式系統包括生活中幾乎所有的電器設備,如PDA、移動計算設備、電視機頂盒、移動互聯網、數字電視、多媒體、汽車、微波爐、數碼相機、家庭自動化系統、電梯、空調、安防系統、自動售貨機、手機、消費電子設備、工業自動化儀表和醫療儀器等。
嵌入式系統的硬件部分包括處理器/微處理器、存儲器和外圍設備、I/O端口、圖形控制器等。嵌入式系統不同於壹般的計算機處理系統。它沒有硬盤那樣的大存儲介質,大多使用EPROM、EEPROM或者閃存作為存儲介質。軟件部分包括操作系統軟件(要求實時多任務運行)和應用程序編程。
嵌入式系統無疑是最熱門、最有前景的IT應用領域之壹。嵌入式系統應用於壹些特殊設備中。通常,這些設備的硬件資源(如處理器、內存等。)都非常有限,而且對成本比較敏感,有時對實時響應要求很高。尤其是隨著消費電器的智能化,嵌入式更為重要。如手機遊戲、PDA、電子詞典、可視電話、VCD/DVD/MP3播放器、數碼相機(DC)、數碼攝像機(DV)、u盤、機頂盒、高清電視(HDTV)、遊戲機、智能玩具、交換機、路由器、數控設備或儀器、汽車電子、家電控制系統等等。
嵌入式系統是軟件和硬件的結合,從事嵌入式開發的有兩種人。
壹類是硬件專業的,比如電子工程,通信工程。他們主要從事硬件設計,有時候還要開發壹些和硬件關系最密切的底層軟件,比如BootLoader,板卡支持包(像PC的BIOS,驅動硬件向下,支持操作系統向上),最初級的硬件驅動。他們的優點是對硬件原理非常清楚,缺點是更擅長定義各種硬件接口,但往往無法應對復雜的軟件系統(如嵌入式操作系統原理和復雜的應用軟件)。
另壹類是軟件和計算機專業的人,主要從事嵌入式操作系統和應用軟件的開發。如果我們這些軟件學習者很好的掌握了硬件原理和接口,也可以寫BSP和硬件驅動。嵌入式硬件設計出來之後,各種功能都是通過軟件來實現的,嵌入式設備的增值很大程度上依賴於嵌入式軟件,嵌入式軟件占了嵌入式系統最重要的工作(很多公司都把硬件設計包給了專門的硬件公司,而稍微復雜壹點的硬件都是由臺灣省或者國外的公司來設計的,國內的硬件設計實力非常薄弱,很多嵌入式公司只負責自己開發軟件, 因為他們都知道,嵌入式產品的區別很大程度上在軟件上,軟件是最“花裏胡哨”的),所以我們這些搞軟件的根本不用擔心自己在嵌入式市場的地位。 智能設備和復雜系統越多,關鍵軟件就越重要,這就是趨勢。
從事嵌入式軟件開發的優勢在於:
(1)這方面的人國內外都很稀缺。壹方面,非專業的IT人員很難切入這個領域,因為這個領域的進入門檻很高,不僅要了解底層的軟件(如操作系統級、驅動程序級軟件),還要對軟件的專業水平有更高的要求(嵌入式系統在軟件設計上要求更高的時空效率),還要了解硬件的工作原理。另壹方面,由於這個領域相對較新,發展太快,很多軟硬件技術出現時間不長或者正在興起(如ARM處理器、嵌入式操作系統、MPEG技術、無線通信協議等。),而掌握這些新技術的人當然不好找。嵌入式人才稀缺,價值自然高。他們越有經驗,他們的價格就越高。其實嵌入式人才是稀缺的,根本原因可能是大部分人都是無條件接觸,這就需要相應的嵌入式開發板和軟件,以及有經驗的人來指導開發過程。
(2)與企業計算等應用軟件不同,嵌入式領域人才的工作強度通常較低(但收入不低)。對於搞企業應用軟件的IT企業來說,這個用戶的系統做好了,又要搞下壹個用戶的,每個用戶的需求和完成時間都要根據客戶的要求來改變,往往是疲憊和重復的。相比之下,從事嵌入式系統的公司有自己的產品計劃,按照自己的節奏行事。開發出來的產品壹般都是通用的,不會被不同的客戶修改。壹個產品型號開發出來後,往往會有很長壹段空閑時間(或者只是對軟件做壹些小修),有時間充電休息。另外大家從事嵌入式軟件的工作範圍比較窄,涉及的專業技術範圍就是那些(ARM,RTOS,MPEG,802.11等。).時間久了,這些東西就會越來越有經驗,就會去賣舊書。幾個說明就夠那些新手琢磨半年了。如果妳是搞應用軟件的,也許下壹個客戶會換壹個完全不同的軟件開發平臺,那就苦了。
(3)如果有壹天妳想創業,想做自己的產品,那麽嵌入是個不錯的主意,不像應用軟件那麽容易被盜版。土木工程學院壹家叫啟星的公司開發了壹款叫“Project E”的手持PDA(南校區門口有廣告)。施工技術人員可以用這款PDA現場進行土建預算估算等土建計算,據說賣得很好。我認識的壹個大學老師,他為餐廳開發了壹個PDA(WinCE平臺,可以無線上網)。據他說,它賣得很好,餐館可以讓顧客點擊PDA點餐,這更時尚。記得00級2+2班的壹群學生在學習Windows編程課程時,用VC++設計了壹個功能強大的菜單系統作為課程項目。當時我真的很想建議他們把這個軟件做成PDA,估計會有壹些銷量(上海火車站南廣場的麥當勞用壹個漂亮的PDA給用戶點餐,就像壹個像樣的)。這些PDA的硬件設計通常由其他公司定制(這稱為“OEM”),它們都是常見的硬件。我們只是設計軟件,成為自己的產品。
從事嵌入式軟件開發的劣勢有:
(1)起點高,使用的技術往往難度較大。如果軟硬件基礎不好,尤其是操作系統級軟件基礎不深,可能不適合此行。
(2)該領域的企業數量遠遠少於企業計算企業。特別是嵌入式小企業多(小企業要自己做產品),知名大公司少(嵌入式大公司主要有英特爾、摩托羅拉、TI、飛利浦、三星、索尼、Futjtum、貝爾-阿爾卡特、意法半導體、中晶、研華、華為、中興、SVA等制造企業)。這些企業習慣性的思維方式是找電子、通信等硬專業的人。
(3)少數公司往往要求碩士以上學歷的人從事嵌入式技術,主要是基於嵌入式技術的難度。但是大部分公司沒有這個要求,只要有經驗就行。
對於從事嵌入式軟件的人來說,最重要的是:
(1)掌握主流嵌入式微處理器的結構和原理。
(2)必須掌握嵌入式操作系統。
(3)必須熟悉嵌入式軟件的開發流程,做過至少壹個嵌入式軟件項目。
嵌入式軟件中最重要的課程包括:
(1)嵌入式微處理器結構與應用:這是壹門嵌入式硬件的基礎課程。我們說過,嵌入式軟件是硬件和軟件的結合,從事嵌入式軟件的人要對ARM處理器的工作原理和接口技術有充分的了解,包括ARM的匯編指令系統。如果不了解處理器的原理,怎麽控制硬件工作,怎麽寫出最節省內存高速運行的代碼(嵌入式軟件設計特別註重時空效率),怎麽寫驅動(驅動都是和硬件打交道的)?許多公司在招聘嵌入式軟件人員時,要求熟悉ARM處理器。以後如果同學來公司從事嵌入式軟件開發,公司會給妳壹份設備的硬件說明書(xxx說明書),妳必須能看懂內存分配、端口使用等最基本的指令(就像x86匯編壹樣),否則怎麽設計軟件。有些同學覺得嵌入式處理器課程很枯燥,主要是因為硬件課程比較抽象。有些同學對ARM匯編不感興趣,認為C語言做嵌入式開發就夠了。其實不應該只是把匯編語言當成編程語言,學習匯編主要是為了掌握處理器的工作原理。壹個不熟悉匯編語言的人如何在這個處理器上寫出最好的C語言代碼?在嵌入式開發的壹些關鍵部分,有時候需要寫壹個程序集,比如Bootloader(可能還有BSP)。尤其是對速度要求比較高的時候(比如DSP處理器高速圖像采集和圖像解壓縮),主要是要靠sinks寫程序(我看到很多公司都是這麽做的)。在嵌入式公司工作,看描述原理的手冊,可能很多都是用匯編描述的(我也遇到過)。這是因為很多硬件設計師只會寫或者喜歡用匯編來描述。這個時候妳壹定要懂匯編程序,否則軟硬件人員可能無法溝通。很多嵌入式崗位在招聘時都要求熟悉組裝。
(2)嵌入式操作系統課程
除了WinCE,大部分嵌入式操作系統的實時性都很強,所以也可以稱之為實時操作系統。從事嵌入式系統的人,至少要掌握壹個嵌入式操作系統(當然掌握兩個更好),這是所有嵌入式技術中最關鍵的。目前,最重要的RTOS主要包括:
第壹種傳統經典RTOS:最重要的是Vxworks操作系統及其Tornado開發平臺。由於Vxworks出現的時間稍早,實時性強(據說可以在1ms內響應外部事件請求),內核可以極小(據說可以小到8K),可靠性高,所以在北美,Vxworks占據了嵌入式系統的壹半以上。尤其是在通信設備等實時性要求高的系統中,幾乎非Vxworks莫屬。Vxworks的很多概念和技術和Linux類似,主要是C語言開發。Vxworks被貝爾-阿爾卡特、朗訊、華為等通信公司在開發產品時廣泛使用。但是因為價格高,Vxworks在壹些小公司或者產品上用不了。很多公司都在轉嵌入式Linux(聽說華為在做這個)。但無論如何,Vxworks在很長壹段時間內都不會動搖。類似Vxworks的還有RTOS如pSOS、QNX、Nucleus等。
第二種嵌入式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嵌入式操作系統:微軟也看到了巨大的嵌入式市場,MS永遠是最強大的。WinCE雖然才出了幾年,但是已經占據了很大的市場份額,尤其是在PDA、手機、顯示儀表等接口要求高或者開發速度快的場合,WinCE已經非常受歡迎(據說有壹家賣工控機的公司賣板卡賣的太好了,根本來不及給客戶切WinCE)。Win CE主要是4.2版本(。NET),開發平臺主要是WinCE Platform Builder。有時,壹些上層應用程序是在EVC環境下開發的。因為WinCE是大家熟悉的VC++環境,所以很容易被人們接受。開發環境方便快捷,加上微軟強大的技術支持,開發WinCE的難度遠低於嵌入式Linux。WinCE最適合急於完成,又不想用嵌入式Linux冒險的開發場合(找嵌入式Linux的人沒那麽好找)。畢竟公司不能像學生壹樣去嘗試,保證開發成功更重要。根據側重點不同,WinCE有兩個特殊版本,壹個是MS PocketPC操作系統專用於PDA(掌上電腦),另壹個是MS SmartPhone操作系統用於智能手機(具有PDA功能的手機),兩者都屬於WinCE平臺。在PDA和手機市場,除了WinCE之外,還有其他知名的PDA嵌入式操作系統,如Palm OS(因其早期出現而聞名)和Symbian等。但在WinCE的強烈沖擊下,Palm和Symbian未來還能有多久?顯然,嵌入式LINUX永遠無法取代WinCE,未來誰會占大份額還很難說。畢竟很多人更願意接受MS這個平臺,就像世界各國政府都在力推Linux很久了,但是妳能看到有多少用戶真正在PC上使用LINUX?據我觀察,在嵌入式平臺上,LINUX的呼聲最高,但WinCE其實用得更多。嵌入式LINUX可能更多的是有長期產品規劃的公司,從長遠考慮,降低成本。WinCE和多媒體(比如MPEG技術)是微軟亞洲工程院做得比較多的項目領域之壹,他們需要精通WinCE的人。總結嵌入式操作系統的課程。如果妳覺得自己基礎很深,可以努力學習,可以學習嵌入式Linux。
(3)嵌入式開發的其他相關軟件課程。
如果熟悉嵌入式應用的壹些主要領域,這類人更受企業歡迎。主要相關領域包括:
A.數字圖像壓縮技術:這是嵌入式系統最重要和最流行的應用領域之壹。主要是需要掌握MPEG編解碼算法和技術,比如DVD、MP3、PDA、高清電視、機頂盒等都涉及到MPEG高速解碼。
b .通信協議和編程技術:這包括傳統的TCP/IP協議和流行的無線通信協議。首先,大部分嵌入式設備都是接入局域網或者互聯網的,所以首先要掌握TCP/IP協議及其編程,這是首先需要掌握的基礎技術。其次,無線通信是大趨勢,所以掌握無線通信協議和編程也很重要。無結通信協議包括無線局域網通信協議802.11系列、藍牙、移動通信(如GPRS、GSM、CDMA等。).
C.網絡與信息安全技術:如加密技術、數字證書CA等。
D.DSP技術:DSP即數字信號處理,DSP處理器通過硬件實現數字信號處理算法,如高速數據采集、壓縮、解壓縮、通信等。數字信號處理是電子、通信等硬件專業的課程,搞軟件的最好懂。客觀DSP人才短缺。如果妳有信號與系統、數字信號處理等課程的基礎,對學習MPEG編解碼原理會很有幫助。
(4)嵌入式開發的相關硬件基礎。
對於軟件工程專業的學生來說,重要的是從事嵌入式軟件開發,比如數字電路、計算機組成原理、嵌入式微處理器結構等硬件課程。此外,匯編語言、C/C++、數據結構與算法等軟件基礎課程,尤其是操作系統也很重要。嵌入式本身就是從單片機發展而來的,但是單片機沒有OS,很多嵌入式應用越來越復雜,以至於不得不引入嵌入式操作系統。另外,為了追求更高的信號處理速度,在壹些高速場合,很多公司用硬件實現壹些DSP算法,比如MPEG壓縮和解壓縮算法,這就涉及到HDL數字電路設計技術及其FPGA/IP核心實現技術,市場上也缺乏這方面的人才。暫且不說,另外,會寫驅動的人非常稀缺(驅動也可以屬於嵌入式範疇),包括DDK開發環境和桌面Windows的WDM驅動。該公司不得不壹直推出新產品。每壹個新產品出來。如果能被操作系統使用,就要寫驅動了。寫驅動需要掌握操作系統(如Windows或Linux)的內部工作原理,涉及少量硬件知識,很難找到這方面的人。
想當高手的同學也可以在驅動方面有所突破。我可以說說我自己的經歷。2011年前,我在壹家公司簡單寫過壹個WinCE驅動程序(正是因為知道這個領域缺人,才不得不這麽做)。雖然我之前沒有做過司機,但是當我申請那個職位的時候,我確定公司很難招到這個領域的人。既然找不到人,就要有人做司機,正好是切入這個領域的機會。面試的時候,我談到我寫過多少上萬行的匯編語言,對計算機的工作原理有多清楚。我在簡歷裏寫了我看了兩本關於Windows驅動模型的英文原版書,寫了幾個小的驅動練習程序(其實根本沒寫。我們同學以後千萬不要像我壹樣苦練,才不會落到我這種地步。不用像我壹樣“騙”公司,這是典型的反面教材),但是壹切都過(當然最重要的是筆試和面試題都過得去),這只能說明這個領域的人難找。公司沒指望找個做過司機的,找個有相關基礎的就不錯了。做了之後,找起來就沒那麽難了。其實在司機身上工作是很舒服的。做完壹個版本,會空壹段時間。只有在公司新的芯片推出或者新的OS出現之後,才需要開發新版本的驅動程序。那時候妳會閑著近壹個月,等著WinCE的測試版。NET測試版即將推出,準備將驅動程序升級到CE。NET,又整天在軟件學院上班,無限懷念那段無憂無慮的時光。無獨有偶,我無意間又體會到了嵌入式的魅力。我的手機,用了三年,終於不能用了。這次更新,除了手機常見的功能外,最好還能有MP3功能(很多英語聽眾都有MP3文件),有英漢詞典,有閱讀WORD文檔的能力。最後我選擇了最便宜的符合以上條件的手機多普達515(切我2.2K,不過就當是我對嵌入式業務的支持吧,我願意開),這是最低配的智能手機。回去查壹下,手機的about顯示這款手機的處理器是ARM,OS是MS Smartphone(即WinCE。NET 4.2),這麽巧,可以作為學習嵌入式課程的產品案例(我們的WinCE課程很豐富多彩之後,希望能從微軟研究院弄點智能手機來開發)。帶OS的手機真好。金山詞霸,WORD,EXCEL,REGEDIT等。都有智能手機版本。PC上的MP3和DOC下載時可以自動轉換成智能手機格式,真的很酷。可以用Windows CE開發壹些必要的程序,下載到手機上。PDA智能手機在市場上很受歡迎,MS總是財源滾滾。但是我發現市面上出現的國產ARM+LINUX手機,價格只有1.2K,谷歌上關於嵌入式系統的討論太多了。很多有經驗的人把自己的經歷說出來,放到論壇裏,妳會感受到嵌入式學習的熱潮。要麽走ARM+WinCE,要麽走ARM+LINUX,要麽走ARM+VXWORKS。搞嵌入的都可以選擇壹條路,條條大路通羅馬。