1. 程式人生 > >十年研發經驗嵌入式工程師

十年研發經驗嵌入式工程師

From:http://www.51hei.com/bbs/dpj-26458-1.html 從事嵌入式研發行業十年,認為學習就是要不斷的吸納知識,在研發過程中,經常會遇到一些問題,這種發現問題並解決問題的過程就是進步。 為什麼選擇學習嵌入式? 嵌入式系統無疑是當前最熱門最有發展前途的IT應用領域之一,同時也是當今IT領域僅存的幾個金領職位之一。當前的中國IT人才面臨嚴重的“後繼乏人”,  而且這種缺口由於培訓缺乏、教育模式等原因造成的,而缺口最大的,就是高階IT人才。如果你從事的IT培訓不專業,面對競爭越來越激烈的職場,基本找不到  工作。據專家預測,嵌入式每年人才缺口在30萬左右。 嵌入式行業平均薪資分佈
工欲善其事,必先利其器,除了推薦的書籍外,也推薦一下我用的開發板,我學習用的是飛凌的OK6410,感覺算是入門不錯的板子,剛剛看到他們官方微博貌似A8210ARM92416準備促銷呢,有50元的京東購物卡送,想入手的可以關注下。 ARM+Linux嵌入式底層核心驅動方向學習總體路線圖  附上ARM學習路徑圖,希望對學習者能有所啟發。 基礎學習Ⅰ---Linux入門         目前嵌入式主要開發環境有 Linux、Wince等;Linux因其開源、開發操作便利而被廣泛採用。而Linux作業系統也只是一個簡單的作業系統,簡單的使用對於嵌入式開發人 員來說價值並不很高,真正有價值的是掌握Linux的基本服務和Linux的設計理念、思想,這對於嵌入式開發人員的長期發展是很極其重要的。Linux 系統有很多發行版,RedHat、Ubuntu、Fedora等。作為嵌入式開發人員,我們沒有必要把精力放到使用哪個Linux發行版上,而是儘快把 Linux系統儘快安裝好。如果打算堅持長期學習,那麼建議您把自己的電腦做成雙系統,而不要在虛擬機器上安裝。 Ubuntu系統下載地址:
http://www.ubuntu.org.cn/
A)經典書籍推薦:  B)經典學習視訊推薦:Linux作業系統入門 基礎學習Ⅱ---C語言     C語言是嵌入式開發必備的基礎知識。在Linux下從事C語言的開發,你會覺得更為順暢、更為自然,因為C語言是因unix的出現而誕生的,Linux內  核幾乎完全是由C語言編寫完成的。學習C語言,如果不會用指標,那麼就稱不上會C語言。做嵌入式開發指標更顯得尤為重要,所以做嵌入式開發除了掌握位操 作、限定詞等,對指標的掌握是不可或缺的。而且要掌握多級指標、函式指標等等。涉及到指標,那麼就會講到記憶體分配。在大學中,學習C語言一般的學習很少講 到記憶體分配,但是如果期望從事嵌入式開發,那麼就必須懂得C語言是怎麼做記憶體分配管理的。指標之外,還要學習模組化編譯處理、指標與陣列、gcc、 Makefile、GDB、遞迴、結構體、巨集定義使用等。C語言是整棟嵌入式大廈的基礎,所以在學習嵌入式時,必須把C語言重視起來,多敲程式碼,多練。一  名優秀的程式設計師必定是通過“體力勞動”再轉向“腦力勞動的”,這也是為什麼我們要有“寫不出程式碼=0”思想的原因所在。     如 果說C語言相當於文字,那麼
資料結構
就相當於在造句、寫文章。程式碼質量有一部分取決於對資料結構的掌握程度。在資料結構部分我們要把連結串列、樹、排序作  為學習重點。而且我們也可以檢視一些比較常見的函式(如strcopy、strcat、printf等)在核心中是如何實現的,以及編寫程式碼模擬堆疊,這 不僅有利於編寫程式碼質量的提高,而且還可以初步瞭解Linux核心精髓,為今後工作打下堅實的基礎。         C++、QT在嵌入式開發領域,是用來開發圖形介面的,希望從事上層應用開發及圖形介面,那麼在C++、QT方面需要比較深入的學習。   A)經典書籍推薦:      B)經典學習視訊推薦:C語言入門 C)經典學習案例: 1、學員成績管理系統2、計算器3、電子詞典4、檔案壓縮器 基礎進階---Linux應用程式設計      Linux的思想源於Unix。Linux繼承了Unix的優點,但 是沒有用UNIX的程式碼,所有程式都是重新編寫的,而且Linux與Unix的原始碼級相容。Linux是類Unix作業系統。Linux 不僅符合 POSIX 標準,而且還包括其它 UNIX 標準的多種特性,例如,UNIX 的 System V 介面文件(System V Interface Document,SVID)和伯克利軟體釋出(Berkeley Software Distribution,BSD)版本。Linux 採用了折衷的策略,包含了  UNIX 幾個典型特性當中最實用的一些功能:      Linux 採用了 SVR4 的程序間通訊(IPC)機制:共享記憶體、訊息佇列、訊號。      Linux 支援 BSD Socket 網路程式設計介面。      許多 Linux 發行版採用 SysV init 機制,支援執行級別。 此階段的學習是從事嵌入式上層應用開發以及底層開發人員的必修課程。程序、執行緒、訊號、檔案鎖、socket是這部分內容的重點。要把這些內容學的透徹非 要下些苦功夫不可。而且函式是系統提供給我們的,難免要對計算機系統深入理解一番。TCP/IP協議也是要涉及到的。有問題建議用Google搜尋及登陸 chinaunix論壇。通過這個階段的學習,我們就可以初步實現一些應用程式的開發了,如做自己的shell命令解析器、簡單的聊天軟體、視訊多播等。 A)經典書籍推薦:  B)經典學習視訊推薦:Linux環境高階程式設計 C)經典學習案例: 1、串列埠監聽程式   2、圖片瀏覽器      3、MP3播放器        4、聊天程式         5、 ftp程式 6、音訊廣播程式   7、ping的實現     8、DDos攻擊程式   9、ARP攻擊程式 嵌入式入門---ARM體系結構     從這部分開始,我們將真正進入嵌入式開發學習階段。首先我們要知道採用哪種處理器。目前通用嵌入式處理器有ARM、MIPS、PowerPC、X86等。  從市場產品佔有率上看,ARM處理器遠遠領先於同類其它處理器,並逐步掠奪傳統51微控制器和英特爾市場份額。據招聘網站統計,目前用人單位在技術水平上要  求開發人員掌握ARM9及以上平臺的開發技術。ARM公司在釋出ARM11產品後,更改以往的數字標記更新方式,轉為釋出ARM Cortex。但是Cortex並不是更高階,而是全新系列的處理器,比如Cortex  M3,它主要應用於機械加工、工控領域,目的是取代以前的ARM7處理器。     在開始學習前,建議有一塊自己的開發板,目前ARM9  2440的開發板價格在400-600元之間,ARM11 6410的開發板價格要高一些,最便宜的也要1200元以上。在此,提醒大家儘量不要買mini開發板,雖然mini開發板的價格要便宜些,但是與正常開 發板相比,mini板功能是不完善的。嵌入式彙編有別於X86彙編,所以如果以前沒有接觸過組合語言,那麼沒有必要先去學X86彙編再學嵌入式彙編,可以 直接學習嵌入式彙編。除了彙編我們還要學習ARM指令集。有了開發板,我們要下載相對應處理器的DataSheet及開發板電路原理圖。ARM體系結構的  學習我們是不能完全照抄別人程式碼的,因為我們自己手中的開發板及處理器與別人是不同的,除非所用的程式碼是根據你手中的開發板來編寫的。所以,我們要先去看 書、看視訊資料理解原理及工作方式等,然後根據自己開發板的電路原理圖和DataSheet來編寫程式碼,達到理解外圍裝置工作原理和操作硬體的目的。  B)經典學習視訊推薦: 1)  嵌入式掃盲篇——十問嵌入式 2)ARM體系結構與Bootloader開發 3)嵌入式ARM  Linux開發——ARM彙編 C)經典學習案例: 1. ARM模擬器開發       2. Watchdog控制程式        3. RTC時鐘控制程式 4. Uart控制程式            5. LCD控制程式                    6. 觸控式螢幕控制程式 7. DMA控制程式          8. 音訊控制程式                    9. 網絡卡控制程式 10. 檔案系統製作        11. ARM-Linux移植 嵌入式提升---Linux核心、驅動          眾所周知嵌入式開發包含至少兩個級別,一個是嵌入式核心驅動級別,另外一個是嵌入式應用層開發,而薪酬高的、最具價值的無疑是嵌入式核心驅動級別的開發  者。真正的嵌入式高手或者企業中的核心開發人員,一定是嵌入式底層的核心驅動開發工程師,這些工程師成長比較緩慢,造成對核心驅動人才的大量需求,所以這 些人才是真正企業需要的香餑餑。掌握驅動開發會讓自己的核心能力有極大的飛躍,真正實現嵌入式最有價值的就業。          由於Linux核心更新速度很快,書籍和視訊不可能及時更新,所以我們再看書和視訊後,要自己動手下載核心原始碼包,去看核心中的程式碼,在這裡可以充分檢驗 C語言、資料結構等基礎知識的掌握程度。而驅動的編寫還是要藉助外設硬體電路原理圖和晶片手冊。核心和驅動的知識是讓我們根據不同的硬體,編寫對應的驅  動、合理剪裁核心、製作檔案系統,並移植到硬體開發板上。如果手裡有ARM11  6410及以上的開發板,可以試試在裸板上編寫驅動並移植Android系統到開發板上吧。  B)經典學習案例: 1. GPIO驅動                2. RTC時鐘驅動   3. WatchDog驅動   4. Udev移植      5. 觸控式螢幕輸入裝置驅動 6. LCD顯示裝置驅動   7. DMA驅動        8. 音訊裝置驅動        9. Nand Flash塊裝置驅動  10. 網路裝置驅動 硬體工程師的書籍(等等)