初學(xue)嵌入式(shi)開(kai)發要學(xue)什么?掌(zhang)握好這幾(ji)個方向肯定沒問題
時間(jian):2018-06-13 來源(yuan):嵌入式論壇
現(xian)在社會(hui)在科(ke)技方面總(zong)體(ti)而言是(shi)發展非常的(de)(de)(de)(de)迅(xun)速的(de)(de)(de)(de),在我們的(de)(de)(de)(de)生活中角(jiao)角(jiao)落落都充斥著高科(ke)技的(de)(de)(de)(de)味道(dao),里入(ru)我們平時基(ji)礎(chu)到的(de)(de)(de)(de)四軸飛行器,最(zui)近出(chu)的(de)(de)(de)(de)小米的(de)(de)(de)(de)搞怪音響,咳嗽一聲就會(hui)亮的(de)(de)(de)(de)聲控燈(deng)等等這些東西從表面來看(kan)沒有(you)什么,但是(shi)他的(de)(de)(de)(de)內部組(zu)成(cheng)都是(shi)科(ke)技的(de)(de)(de)(de)成(cheng)果,也(ye)是(shi)嵌(qian)入(ru)式(shi)的(de)(de)(de)(de)成(cheng)果。
既然嵌入式在我(wo)們的(de)(de)(de)(de)生活(huo)中(zhong)應(ying)用的(de)(de)(de)(de)如此之多,相應(ying)的(de)(de)(de)(de)需要(yao)(yao)(yao)的(de)(de)(de)(de)開(kai)發人員也是非常(chang)多的(de)(de)(de)(de),隨時都需要(yao)(yao)(yao)新鮮(xian)血(xue)液的(de)(de)(de)(de)注入,那么就(jiu)(jiu)有朋(peng)友問了初學(xue)(xue)嵌入式開(kai)發要(yao)(yao)(yao)學(xue)(xue)什么技術呢?總不能說一看就(jiu)(jiu)會吧,當然不是不如此今(jin)天我(wo)們要(yao)(yao)(yao)講(jiang)的(de)(de)(de)(de)就(jiu)(jiu)是對于(yu)一個(ge)零基礎也就(jiu)(jiu)是初學(xue)(xue)的(de)(de)(de)(de)朋(peng)友想要(yao)(yao)(yao)學(xue)(xue)習(xi)嵌入式需要(yao)(yao)(yao)學(xue)(xue)習(xi)那些(xie)東西。
好了進入(ru)正(zheng)題(ti)我把初(chu)學嵌入(ru)式開發要學什么大致的分(fen)為八個大的階(jie)段。

1、C語言
嵌(qian)入(ru)式Linux工程(cheng)師的(de)(de)(de)學(xue)習需要(yao)具備一定(ding)的(de)(de)(de)C語(yu)言(yan)基(ji)礎(chu),C語(yu)言(yan)是(shi)嵌(qian)入(ru)式領域(yu)最重要(yao)也(ye)是(shi)最主(zhu)要(yao)的(de)(de)(de)編(bian)程(cheng)語(yu)言(yan),通過大量編(bian)程(cheng)實例重點(dian)理(li)解C語(yu)言(yan)的(de)(de)(de)基(ji)礎(chu)編(bian)程(cheng)以及高級(ji)編(bian)程(cheng)知識。包括:基(ji)本數據類型、數組、指針、結構體、鏈表、文件操作、隊列(lie)、棧等(deng)。
2、Linux基(ji)礎
Linux操作系(xi)統的(de)(de)概念、安裝(zhuang)方法,詳細了解Linux下的(de)(de)目錄(lu)結構、基本(ben)命令(ling)、編(bian)(bian)輯器VI ,編(bian)(bian)譯(yi)器GCC,調試器GDB和 Make 項目管(guan)理工具, Shell Makefile腳本(ben)編(bian)(bian)寫等(deng)知識,嵌入式開發環境的(de)(de)搭建。
3、Linux系統(tong)編程(cheng)
重點學習標準(zhun)I/O庫,Linux多任(ren)務(wu)編程(cheng)中的(de)多進程(cheng)和多線程(cheng),以及(ji)進程(cheng)間通信(pipe、FIFO、消息(xi)隊列、共享內存(cun)、signal、信號量等),同步與互斥對共享資(zi)源訪(fang)問控制等重要知識,主要提(ti)升對Linux應用開發的(de)理解和代(dai)碼(ma)調試的(de)能力。
4、Linux網絡(luo)編程
計(ji)算機網(wang)絡(luo)(luo)在(zai)嵌入(ru)式Linux系(xi)統(tong)應用開(kai)發(fa)(fa)過程(cheng)(cheng)中使(shi)用非常(chang)廣泛,通過Linux網(wang)絡(luo)(luo)發(fa)(fa)展、TCP/IP協(xie)議(yi)、socket編(bian)程(cheng)(cheng)、TCP網(wang)絡(luo)(luo)編(bian)程(cheng)(cheng)、UDP網(wang)絡(luo)(luo)編(bian)程(cheng)(cheng)、Web編(bian)程(cheng)(cheng)開(kai)發(fa)(fa)等方(fang)(fang)面入(ru)手,全(quan)面了(le)解Linux網(wang)絡(luo)(luo)應用程(cheng)(cheng)序開(kai)發(fa)(fa)。重點學習網(wang)絡(luo)(luo)編(bian)程(cheng)(cheng)相關API,熟(shu)(shu)練掌握TCP協(xie)議(yi)服(fu)務器(qi)的編(bian)程(cheng)(cheng)方(fang)(fang)法和并發(fa)(fa)服(fu)務器(qi)的實(shi)(shi)現(xian),了(le)解HTTP協(xie)議(yi)及(ji)其實(shi)(shi)現(xian)方(fang)(fang)法,熟(shu)(shu)悉UDP廣播、多播的原(yuan)理及(ji)編(bian)程(cheng)(cheng)方(fang)(fang)法,掌握混(hun)合C/S架構(gou)網(wang)絡(luo)(luo)通信系(xi)統(tong)的設計(ji),熟(shu)(shu)悉HTML,Javascript等Web編(bian)程(cheng)(cheng)技術及(ji)實(shi)(shi)現(xian)方(fang)(fang)法。
5、C++ 、QT
初學(xue)嵌(qian)入(ru)式(shi)開發(fa)(fa)(fa)要學(xue)什么C++是(shi)Linux應(ying)(ying)用開發(fa)(fa)(fa)主要語(yu)言之一,本(ben)階段重點掌握面(mian)(mian)向對象編(bian)程(cheng)的(de)基本(ben)思想(xiang)以(yi)及(ji)C++的(de)重要內容。圖形(xing)界面(mian)(mian)編(bian)程(cheng)是(shi)嵌(qian)入(ru)式(shi)開發(fa)(fa)(fa)中非常重要的(de)一個環節。由(you)于(yu)QT具有跨平臺(tai)、面(mian)(mian)向對象、豐富API、支持2D/3D渲染、支持XML、多國語(yu)等強大功能(neng),在(zai)嵌(qian)入(ru)式(shi)領域的(de)GUI開發(fa)(fa)(fa)中得到(dao)了廣范的(de)應(ying)(ying)用,在(zai)本(ben)階段通過基于(yu)QT圖形(xing)庫的(de)學(xue)習使學(xue)員可以(yi)熟練(lian)編(bian)寫GUI程(cheng)序,并移植QT應(ying)(ying)用程(cheng)序到(dao)Cortex-A8平臺(tai)。包括IDE使用、QT部件及(ji)布局管理器、信(xin)息與(yu)槽機(ji)制的(de)應(ying)(ying)用、鼠標、鍵(jian)盤(pan)及(ji)繪(hui)圖事(shi)件處(chu)(chu)理及(ji)文件處(chu)(chu)理的(de)應(ying)(ying)用。
6、數(shu)據結(jie)構與算法(fa)
數(shu)據結構及(ji)(ji)算法在嵌入式(shi)底層驅(qu)動、通(tong)信協議、及(ji)(ji)各種(zhong)引擎開發中會得到大量(liang)應用,對其掌(zhang)握的(de)(de)(de)好壞直(zhi)接影響程序的(de)(de)(de)效率(lv)、簡潔及(ji)(ji)健壯性。此階段的(de)(de)(de)學習(xi)要重點理解數(shu)據結構與算法的(de)(de)(de)基礎內容,包括(kuo)順序表、鏈表、隊列、棧、樹、圖、哈希表、各種(zhong)查找排序算法等應用及(ji)(ji)其C語言實(shi)現過程。
7、Cortex A8 、Linux 平臺開發
通過基(ji)(ji)(ji)于(yu)ARM Cortex-A8處理s5pv210了解芯片手(shou)冊的(de)(de)基(ji)(ji)(ji)本閱讀技巧,掌握s5pv210系(xi)統(tong)(tong)資源(yuan)、時鐘控(kong)(kong)制(zhi)(zhi)器(qi)、電源(yuan)管理、異常中斷控(kong)(kong)制(zhi)(zhi)器(qi)、nand flash控(kong)(kong)制(zhi)(zhi)器(qi)等(deng)模(mo)塊,為底層平(ping)臺(tai)(tai)(tai)搭(da)建做好準(zhun)備。Linux平(ping)臺(tai)(tai)(tai)包(bao)括內核(he)(he)裁減、內核(he)(he)移植、交叉編(bian)譯、GNU工具使(shi)用、內核(he)(he)調試(shi)、Bootloader介紹(shao)、制(zhi)(zhi)作(zuo)(zuo)與原理分(fen)析、根文件系(xi)統(tong)(tong)制(zhi)(zhi)作(zuo)(zuo)以(yi)及(ji)向內核(he)(he)中添加自己(ji)的(de)(de)模(mo)塊,并在s5pv210實驗平(ping)臺(tai)(tai)(tai)上運行自己(ji)制(zhi)(zhi)作(zuo)(zuo)的(de)(de)Linux系(xi)統(tong)(tong),集成部(bu)署(shu)Linux系(xi)統(tong)(tong)整(zheng)(zheng)個流程(cheng)。同(tong)時了解Android操(cao)作(zuo)(zuo)系(xi)統(tong)(tong)開發流程(cheng)。Android系(xi)統(tong)(tong)是基(ji)(ji)(ji)于(yu)Linux平(ping)臺(tai)(tai)(tai)的(de)(de)開源(yuan)操(cao)作(zuo)(zuo)系(xi)統(tong)(tong),該平(ping)臺(tai)(tai)(tai)由操(cao)作(zuo)(zuo)系(xi)統(tong)(tong)、中間件、用戶界面(mian)和應(ying)用軟件組成,是首個為移動(dong)終端打造的(de)(de)真正開放和完(wan)整(zheng)(zheng)的(de)(de)移動(dong)軟件,目前它的(de)(de)應(ying)用不再(zai)局限(xian)于(yu)移動(dong)終端,還包(bao)括數據電視、機(ji)頂盒(he)、PDA等(deng)消(xiao)費類電子產(chan)品。
8、初學嵌入式開發要學什(shen)么驅動(dong)開發肯(ken)定是跑不了(le)的
驅(qu)(qu)動程序(xu)設計是(shi)嵌入式Linux開(kai)(kai)發(fa)工(gong)(gong)(gong)作(zuo)中(zhong)(zhong)(zhong)重要的(de)(de)(de)(de)一(yi)部(bu)(bu)分(fen),也是(shi)比較(jiao)困難的(de)(de)(de)(de)一(yi)部(bu)(bu)分(fen)。本階段的(de)(de)(de)(de)學習要熟(shu)(shu)悉(xi)(xi)Linux的(de)(de)(de)(de)內核(he)機制、驅(qu)(qu)動程序(xu)與用(yong)戶級應用(yong)程序(xu)的(de)(de)(de)(de)接(jie)(jie)口,掌握系(xi)統(tong)對設備(bei)(bei)的(de)(de)(de)(de)并發(fa)操作(zuo)。熟(shu)(shu)悉(xi)(xi)所開(kai)(kai)發(fa)硬件的(de)(de)(de)(de)工(gong)(gong)(gong)作(zuo)原理,具(ju)備(bei)(bei)ARM硬件接(jie)(jie)口的(de)(de)(de)(de)基礎知識(shi),熟(shu)(shu)悉(xi)(xi)ARM Cortex-A8處理器s5pv210各(ge)資源、掌握Linux設備(bei)(bei)驅(qu)(qu)動原理框架(jia),熟(shu)(shu)悉(xi)(xi)工(gong)(gong)(gong)程中(zhong)(zhong)(zhong)常見Linux高級字(zi)符設備(bei)(bei)、塊(kuai)設備(bei)(bei)、網絡(luo)設備(bei)(bei)、USB設備(bei)(bei)等(deng)驅(qu)(qu)動開(kai)(kai)發(fa),在工(gong)(gong)(gong)作(zuo)中(zhong)(zhong)(zhong)能獨立勝任(ren)底層(ceng)驅(qu)(qu)動開(kai)(kai)發(fa)。
那么對于學習方法(fa)也來給大家(jia)一些簡(jian)答的(de)建(jian)議

學(xue)習嵌(qian)入式開發的一些學(xue)習方(fang)法以及(ji)注意事項
1、學習利用搜(sou)索引(yin)擎
當了多年(nian)工程師、自認是“看得懂系統架構(gou)的(de)(de)軟件人”的(de)(de)PTRGroup首席科學家MichaelAnderson認為,不要(yao)閉門造車(che),要(yao)善用開放源(yuan)碼世界的(de)(de)信息,很多常(chang)見(jian)的(de)(de)設計(ji)問題其(qi)實透過因特網就能(neng)找到同(tong)(tong)領域菁英貢獻的(de)(de)程序代碼;嵌入式工程師們要(yao)走(zou)出自己的(de)(de)小世界擁(yong)抱社群,與同(tong)(tong)領域的(de)(de)其(qi)他工程師們相互交流、互相幫助,而這也(ye)是開放源(yuan)碼世界的(de)(de)精(jing)神。
2、建立系統級的工程思(si)維
自詡為高信賴(lai)度嵌入(ru)式(shi)系統(tong)(tong)專家(jia)、擔(dan)任了多年工程師的(de)E2V電子系統(tong)(tong)總工程師AdamTaylor認為,嵌入(ru)式(shi)工程師擁有系統(tong)(tong)導向的(de)思維(wei)是(shi)很(hen)重要的(de),有不少開發案遇到問題,就是(shi)因為沒有在開發初期充分考(kao)慮基(ji)準(zhun)、驗證(zheng)策略以及兼容性(xing)驗證(zheng)計劃等項(xiang)目(mu)(mu);此外(wai)每個嵌入(ru)式(shi)工程師都應該具(ju)備優(you)良(liang)的(de)項(xiang)目(mu)(mu)管理技巧,力求準(zhun)時完成(cheng)負責的(de)項(xiang)目(mu)(mu)。具(ju)備能明智(zhi)因應技術與項(xiang)目(mu)(mu)風險(xian)的(de)能力,對職業生涯發展會(hui)很(hen)有幫助。
3、熟悉實時(shi)操作系統(RTOS)
在工(gong)(gong)程(cheng)人(ren)才招募機構RandstadTechnologies負責(ze)嵌(qian)入式(shi)產業領(ling)域的(de)(de)解決方案經理HenryWintz表示(shi),目前(qian)產業界(jie)對(dui)于熟悉(xi)RTOS的(de)(de)工(gong)(gong)程(cheng)師(shi)需求很高,也愿意(yi)提(ti)供更(geng)高的(de)(de)薪資水平;因此他鼓勵沒(mei)有接觸過RTOS的(de)(de)嵌(qian)入式(shi)工(gong)(gong)程(cheng)師(shi)從一些(xie)較(jiao)小型的(de)(de)系統(tong)著手,累積相關(guan)技術經驗。此外他也發(fa)現(xian)產業界(jie)對(dui)嵌(qian)入式(shi)Linux人(ren)才有不(bu)少需求,主要是因為這種(zhong)操作(zuo)系統(tong)具(ju)備較(jiao)大的(de)(de)設計彈性。
4、初學(xue)嵌入式開(kai)發要學(xue)什么(me)這個問題(ti)培(pei)養多元化技能與系統觀是(shi)肯定的
擔(dan)任(ren)近多年工(gong)程(cheng)(cheng)師(shi)、具備許多不同(tong)(tong)領域技術經驗的(de)技術顧問公(gong)司Rebelbot顧問JenCostillo建議(yi),原本從事(shi)較(jiao)小型系統架構(gou)(例(li)如(ru)MCU)開發的(de)工(gong)程(cheng)(cheng)師(shi),可以(yi)開始(shi)去熟悉更大的(de)系統(例(li)如(ru)Linux驅動(dong)程(cheng)(cheng)序),反之亦然。嘗試著(zhu)去開發手(shou)機應用程(cheng)(cheng)序、或者(zhe)是學習后(hou)端服務(wu)器的(de)相關技術,能(neng)讓(rang)你開啟完(wan)全(quan)不同(tong)(tong)的(de)觀(guan)點;他并建議(yi)工(gong)程(cheng)(cheng)師(shi)去熟悉開放性(xing)硬件,現(xian)在市面上有(you)不少現(xian)成(cheng)的(de)開發板,能(neng)讓(rang)工(gong)程(cheng)(cheng)師(shi)專注于學習獨特(te)算(suan)法的(de)開發。
5、了解最新的(de)處理器
有超(chao)過多年嵌入(ru)式軟件工程(cheng)(cheng)師經(jing)驗(yan)的(de)(de)(de)Embedded.fm工程(cheng)(cheng)師EleciaWhite表示,除了(le)要(yao)深入(ru)了(le)解(jie)C或C++等(deng)基本(ben)程(cheng)(cheng)序語(yu)言,有時也(ye)要(yao)認(ren)識一(yi)些(xie)熱門的(de)(de)(de)新程(cheng)(cheng)序語(yu)言以因應(ying)特殊(shu)設(she)計需求(qiu),但(dan)更重要(yao)的(de)(de)(de)是(shi)了(le)解(jie)最新的(de)(de)(de)處(chu)理(li)器技術;處(chu)理(li)器才是(shi)嵌入(ru)式系統的(de)(de)(de)本(ben)質。因為我(wo)們的(de)(de)(de)系統資(zi)源有限,我(wo)們需要(yao)了(le)解(jie)可用的(de)(de)(de)資(zi)源有哪些(xie)。
6、要能熟悉開放源碼軟件
擁有多(duo)年(nian)工(gong)程(cheng)(cheng)師(shi)經(jing)驗的(de)FreescaleSemiconductor數(shu)字網絡全球(qiu)軟(ruan)件(jian)(jian)(jian)開發(fa)部門(men)總監RobOshana表(biao)示,客戶(hu)往往會(hui)要求在系統中整合一大堆軟(ruan)件(jian)(jian)(jian),因(yin)此所(suo)有的(de)嵌入式工(gong)程(cheng)(cheng)師(shi)需(xu)要熟悉各種軟(ruan)件(jian)(jian)(jian);他建(jian)議工(gong)程(cheng)(cheng)師(shi)避(bi)免(mian)只專長(chang)單一領域,因(yin)為那可能(neng)會(hui)阻礙你的(de)成長(chang)。對嵌入式工(gong)程(cheng)(cheng)師(shi)來說,確(que)保自己對軟(ruan)硬件(jian)(jian)(jian)技術都很(hen)了解,是非常寶(bao)貴的(de)價值。
7、要能明確表達自己的想(xiang)法與意見透過文字或(huo)繪圖(tu)
Micrum總(zong)裁JeanLaBrosse認為,無(wu)論是哪(na)一種工(gong)程師,都(dou)需要能有(you)效表達(da)自(zi)己的(de)想(xiang)法(fa)(fa)與(yu)意見;往往有(you)些菜鳥工(gong)程師無(wu)法(fa)(fa)清(qing)晰表達(da)自(zi)己的(de)想(xiang)法(fa)(fa),因為抓不到(dao)重點,而(er)最好的(de)解決方法(fa)(fa)是練(lian)習將之圖形(xing)化,例如(ru)畫(hua)出流程圖。這聽起(qi)來好像(xiang)有(you)點過時,但有(you)時利用各種圖框組合(he)來整理自(zi)己的(de)思緒(xu)、表達(da)想(xiang)法(fa)(fa)會(hui)是很有(you)用的(de),例如(ru)iPad的(de)iThoughts應用程序。
好了(le)以上就(jiu)是(shi)關于初學(xue)嵌(qian)入式(shi)開發要(yao)學(xue)什么的(de)一個大方(fang)的(de)總結,包含了(le)C語言,Linux,單片(pian)機等等幾個方(fang)向的(de)技(ji)術,除此之外也給大加簡答(da)的(de)吧嵌(qian)入式(shi)學(xue)習(xi)中需要(yao)注意(yi)的(de)東西以及(ji)學(xue)習(xi)方(fang)法給給大家了(le)一些(xie)建議,還希望能夠(gou)幫到初學(xue)嵌(qian)入式(shi)的(de)朋友。

