嵌入式系統用在一些特定專用設備上,一般這些設備的硬件資源(如處理器、存儲器等)很是有限,而且對成本很敏感,有時對實時響應要求很高等。特別是隨着消費家電的智能化,嵌入式更顯重要。像咱們日常常見到的手機、PDA、電子字典、可視電話、VCD/DVD/MP3 Player、數字相機(DC)、數字攝像機(DV)、U-Disk、機頂盒(Set Top Box)、高清電視(HDTV)、遊戲機、智能玩具、交換機、路由器、數控設備或儀表、汽車電子、家電控制系統、醫療儀器、航天航空設備等等都是典型的嵌入式系統。 linux
嵌入式系統是軟硬結合的東西,搞嵌入式開發的人有兩類。
一類是學電子工程、通訊工程等偏硬件專業出身的人,他們主要是搞硬件設計,有時要開發一些與硬件關係最密切的最底層軟件,如BootLoader、Board Support Package(像PC的BIOS同樣,往下驅動硬件,往上支持操做系統),最初級的硬件驅動程序等。他們的優點是對硬件原理很是清楚,不足是他們更擅長定義各類硬件接口,但對複雜軟件系統每每力不從心(例如嵌入式操做系統原理和複雜應用軟件等)。 web
另外一類是學軟件、計算機專業出身的人,主要從事嵌入式操做系統和應用軟件的開發。若是咱們學軟件的人對硬件原理和接口有較好的掌握,咱們徹底也可寫BSP和硬件驅動程序。嵌入式硬件設計完後,各類功能就全靠軟件來實現了,嵌入式設備的增值很大程度上取決於嵌入式軟件,這佔了嵌入式系統的最主要工做(目前有不少公司將硬件設計包給了專門的硬件公司,稍複雜的硬件都交給臺灣或國外公司設計,國內的硬件設計力量很弱,不少嵌入式公司本身只負責開發軟件,由於公司都知道,嵌入式產品的差別很大程度在軟件上,在軟件方面是最有「花頭「可作的),因此咱們搞軟件的人徹底不用擔憂咱們在嵌入式市場上的用武之地,越是智能設備越是複雜系統,軟件越起關鍵做用,並且這是目前的趨勢。 編程
哪天若想創業,搞自已的產品,那麼嵌入式是一個不錯的主意,這可不像應用軟件那樣容易被盜版。土木學院有一個叫啓明星的公司開發出一個好象叫「工程e」的掌上PDA(南校區門口有廣告),施工技術人員用該PDA可當場進行土木概預算和其它土木計算,聽說銷路特好。我認識的某大學老師,他開發的飯館用的點菜PDA(WinCE平臺,可無線連網和上網),據他說銷路不錯,飯館點點PDA讓客戶點菜,多顯派頭檔次。我記得00級2+2班當年有一組同窗在學Windows程序設計課程時用VC++設計了一個功能很強的點菜系統作爲課程項目,當時真想建議他們將這個軟件作成PDA,估計會有些銷路(上海火車站南廣場的Macdonald便使用很漂亮的PDA給用戶點食品,像摸像樣的)。這些PDA的硬件設計通常都是請其它公司給訂作(這叫「貼牌」:OEM),都是通用的硬件,咱們只管設計軟件就變成本身的產品了。服務器
嵌入式軟件方面最重要的課程包括: 學習
(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。 ui
第二類、嵌入式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內核裁減和優化的人。 spa
第三類、 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是最好的選擇。要麼走ARM+WinCE,要麼走ARM+LINUX,要麼走ARM+VXWORKS。每一個搞嵌入式的人均可選一條路,條條大路通羅馬。 設計