嵌入式學習常見問答
2013-08-20

1、嵌入式 C 與一般 C 的差異
a.特別注重如何用 C 語言控制硬件:
        一般 C 語言不需去控制硬體,不過嵌入式 C 語言需要學會如何用程式去控制硬件。  
b.特別注重執行文件底層工作原理:
          一般 C 語言只要能編譯出執行文件,放到 Windows 上跑即可。嵌入式 C 語言會詳細介紹執行文件運作時的底層原理。如:“負數”在電腦內如何表示的問題。一般程式員只要能寫出“-2”就可以了。嵌入式 C 語言工程師需要知道,在電子電路層面上,是根本沒有“負號”這個觀念的,電子電路只能用“0” 與 “1”來表示負數。如何做到這點,就是我們嵌入式 C 語言課程內容會教的。
c.特別注重 C 語言中的”條件編譯“:
         一般 C 語言工程師,他們執行檔硬體平臺只有X86 一種,所以他們編寫代碼時,不用考慮到這份原始碼可能會移植到不同硬件的情況。但要寫到一份代碼能在千萬種不同硬件上跑起來,就是功力了。因此,寫嵌入式 C 語言的工程師,會大量運用一大堆 if ~ then 的條件判斷,讓代碼編譯成執行檔時,會根據目標硬件的不同,編譯出不同硬件平臺的執行文件。而這種方式,就稱為”條件編譯“,乃嵌入式軟體工程師特別需要訓練的能力。


2、嵌入式與linux之間的關系
        目前嵌入式開發環境主要有:linux、wince和VxWorks;而目前公司普遍采用的是linux,因為其開源、操作方便靈活,所以被嵌入式開發者們所廣泛使用。Linux用來編寫代碼,在linux環境下通過交叉編譯工具編譯成ARM處理器可以識別的機器指令。對于嵌入式開發人員來說,不必過多的去掌握linux操作系統,在開發人員的眼里,linux只是一個開發工具,就像我們使用XP、win7操作系統一樣。

3、ARM相對于單片機的優勢
        單片機目前主要使用在那些產品上?單片機屬于嵌入式設備,基本上很少會運行操作系統。屬于嵌入式產品中比較低端的應用。如電飯鍋、熱水器等家庭常用電氣。因為這些產品的價格相對低廉,而產品銷售價格低,那么他的開發成本自然就低,從事開發的技術人員工資就會受限制。ARM是32bit處理器,可以運行操作系統,如嵌入式Linux,vxworks、windows mobile、ucosII,屬于嵌入式高端應用,嵌入式系統現在和未來的主流和趨勢。如手機,數碼相機。示波器。邏輯分析儀,彩超機,飛機控制系統,衛星等等。技術含量高,薪資相對比較有高,但門檻高學習需要一個周期
      學習嵌入式的優勢
(1)目前國內外這方面的人都很稀缺。一方面,是因為這一領域入門門檻較高,不僅要懂較底層軟件(例如操作系統級、驅動程序級軟件),對軟件專業水平要求較高(嵌入式系統對軟件設計的時間和空間效率要求較高),而且必須懂得硬件的工作原理,所以非專業IT人員很難切入這一領域;另一方面,是因為這一領域較新,目前發展太快,很多軟硬件技術出現時間不長或正在出現(如ARM處理器、嵌入式操作系統、MPEG技術、無線通信協議等),掌握這些新技術的人當然很找。嵌入式人才稀缺,身價自然就高,越有經驗價格就越高。其實嵌入式人才稀少,根本原因可能是大多數人無條件接觸,這需要相應的嵌入式開發板和軟件,另外需要有經驗的人進行指導開發流程。

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

(3)哪天若想創業,搞自已的產品,那么嵌入式是一個不錯的主意,這可不像應用軟件那樣容易被盜版。


4、嵌入式方向會與硬件知識有很大關聯嗎?
        硬件方面我們要求要看懂DATASHEET的時序圖,其它嵌入式開發涉及到的硬件知識我們在課程中會講到

5、為什么有人說IT行業不好找工作?
1、 在學習的過程中,是否做過真正可以應用到實踐中去的事情?真正可以應用到實踐中去的事情,不一定非要有工作經驗,別人所說的工作經驗實際上是看你真正做過些什么相關的任務,比如 如果你真正做出過能運行的Linux平臺Email系統,說明你也有這方面的經驗,具備這些東西,找一份2000多的工作應該不成問題。學IT,技術是根本,如果你連最基本的技術都不過關,那就不要怪用人單位不用你,或者即使用了,也不會給你高額的工資。因為現在的社會很現實,我們常說的一分錢一分貨就是這個道理。
2、所會IT夠專業嗎?只是學習IT工具,缺乏對應用的理解,換句話說就是學得太膚淺。我們想對那些正在學習VB、 PB、 FoxPro 的技術人員上說一句,你還想在業余上玩多久?你不想走真正的專業的技術路線嗎?在目前社會大環境影響,薪水普遍下降的同時,難道還不想趕快走上真正的專業路線嗎?
3、選擇要方向的時候不注重個性化,不仔細的分析就業前景,我們現在要做的事情是要問問自己,是不是跟別人一樣? 傳道有先后,術業有專攻,不要跟其他人一樣,一窩蜂學習某某東西。社會上最缺乏的,永遠是稀缺人才、專業人才。目前IT領域一直都缺少的是 操作系統底層開發者 UNIX/Linux下C/C++開發者 高端UNIX/Linux內核驅動工程師)


6、嵌入式產品開發過程簡述
        嵌入式系統的設計與開發大部分工作都集中在軟件方面。嵌入式系統在開發過程一般都采用 “宿主機/目標板”開發模式,即利用宿主機(PC機)上豐富的軟硬件資源及良好的開發環境和調試工具來開發目標板上的軟件,然后通過交叉編譯環境生成目標代碼和可執行文件,通過串口/USB/以太網等方式下載到目標板上,利用交叉調試器在監控程序運行,實時分析,最后,將程序下載固化到目標機上,完成整個開發過程。
整個軟件開發過程基本包括以下幾個步驟:
1、    系統需求分析。確定設計任務和設計目標,并提煉出設計規格說明書,作為正式設計指導和驗收的標準。系統的需求一般分功能性需求和非功能性需求兩方面。功能性需求是系統的基本功能,如輸入輸出信號、操作方式等;非功能需求包括系統性能、成本、功耗、體積、重量等因素。
2、    體系結構設計。描述系統如何實現所述的功能和非功能需求,包括對硬件、軟件和執行裝置的功能劃分,以及系統的軟件、硬件選型等。一個好的體系結構是設計成功與否的關鍵。在這一步往往需要選定主要的芯片、確定RTOS、確定編程語言、選擇開發環境(編程語言和開發環境在確定RTOS時也就跟著確定了)、確定測試工具和其他輔助設備。
3、    硬件/軟件協同設計?;諤逑到峁?,對系統的軟件、硬件進行詳細設計。為了縮短產品開發周期,設計往往是并行的。嵌入式系統設計的工作大部分都集中在軟件設計上,采用面向對象技術、軟件組件技術、??榛杓剖竅執砑こ嘆2捎玫姆椒?。
4、    源代碼編寫:編寫源C/C++及匯編程序;
    其中包括:
    4.1BootLoader移植
    4.2Kernel移植。內核移植又名最小系統移植,移植后的內核具備網絡通、串口通、根文件系統可用等基本條件。
    4.3網絡協議棧以及驅動程序開發。協議棧分為新協議的開發和基于已有協議設計新的處理例程;驅動包括字符設備驅動、塊設備驅動、網絡設備驅動。
    4.4應用程序的開發。C函數庫(Uclibc/Glibc)、QT圖形化應用程序開發、網絡應用程序開發
5、程序編譯:通過專用編譯器編譯程序;
6、程序下載:通過JTAG、USB、UART方式下載到目標板上;
7、軟硬件測試、調試:通過JTAG等方式聯合調試程序;
8、下載固化:程序無誤,下載到產品上生產。
9.、功能測試、性能測試、系統集成測試、實驗局、新產品發布


7、嵌入式培訓之后前景怎么樣?
       嵌入式系統無疑是當前最熱門最有發展前途的IT應用領域之一。嵌入式系統用在一些特定專用設備上,通常這些設備的硬件資源(如處理器、存儲器等)非常有限,并且對成本很敏感,有時對實時響應要求很高等。特別是隨著消費家電的智能化,嵌入式更顯重要。像我們平常常見到的手機、PDA、電子字典、可視電話、VCD/DVD/MP3 Player、數字相機(DC)、數字攝像機(DV)、U-Disk、機頂盒(Set Top Box)、高清電視(HDTV)、游戲機、智能玩具、交換機、路由器、數控設備或儀表、汽車電子、家電控制系統、醫療儀器、航天航空設備等等都是典型的嵌入式系統。
       正如我國資深嵌入式系統專家—沈緒榜院士的預言, “未來十年將會產生頭大小、具有超過一億次運算能力的嵌入式智能芯片”,將為我們提供無限的創造空間。
選擇開發要比系統應用薪水要上升的更為迅速,而且更容易突破5000、8000或10000等每月的門檻,一年工作經驗的從業人員平均薪資5000元左右,五年工作經驗的一般月薪都在2萬左右,但是這個方向難度會更大,同時會更枯燥些,需要“鐵屁股”——能坐得住,一但真正入門,就會有很強的成就感,進入大公司也只是早晚的事。