當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 入門指導(dǎo) > 嵌入式領(lǐng)域的職業(yè)發(fā)展方向是什么
1、首先了解 什么是嵌入式? ..
2、什么是嵌入式系統(tǒng)?
嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,對可靠性、成本、體積、功耗有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。
關(guān)鍵詞 :以應(yīng)用為中心、軟硬件可裁剪、有嚴(yán)格要求、專用計(jì)算機(jī)系統(tǒng)
典型代表:手機(jī)
3、學(xué)習(xí)嵌入式都是學(xué)些什么?
很多人對嵌入式應(yīng)該學(xué)些什么說的很復(fù)雜或者很簡單,我以主流的linux操作系統(tǒng)為例,并借助一張圖大致幫大家理一下這部分的內(nèi)容(以下內(nèi)容按圖中由外到內(nèi)展開),
很多人只能做單片機(jī)開發(fā),比如C51或者STM32(比較常見)等,當(dāng)然了他們也可以跑一些小型的操作系統(tǒng)比如μC/OS-II或μC/OS-III等,當(dāng)然了這些也是基于C語言的學(xué)習(xí),也是和硬件在打交道,屬于C語言直接調(diào)用庫函數(shù)或者直接操作寄存器,也能夠讓硬件正常的工作,沒錯(cuò),會(huì)這些你也能有一份工作,學(xué)的深入的也會(huì)有不錯(cuò)的工作,正所謂360行行行出狀元嘛,但是當(dāng)你在這個(gè)方向工作三五年之后你會(huì)發(fā)現(xiàn)你進(jìn)入到了瓶頸期,為什么呢?因?yàn)槟銜?huì)發(fā)現(xiàn)你的技術(shù)處于某個(gè)高度,很難得到提升,而且有很多東西感覺屬于這個(gè)行業(yè),想嘗試著去做,但是就是沒有能力去做,這個(gè)時(shí)候不是你能力不夠,而是你的技術(shù)儲(chǔ)備不夠了。你需要去打通一下任督二脈,那么這個(gè)時(shí)候建議你上手真正的嵌入式開發(fā)。
大家通過上面那張圖可以明顯的看到,在C語言和硬件之間有很多的東西需要我們?nèi)タ朔,這個(gè)就是嵌入式門檻的學(xué)習(xí)比較高的原因,因?yàn)橹虚g需要很多的技術(shù)儲(chǔ)備,如果不能打通中間環(huán)節(jié),那么你就只能停留在單片機(jī)開發(fā)的層面。那么接下來我大致的幫大家理一下這一塊的一個(gè)思路,小弟入坑不久,錯(cuò)誤和漏洞肯定是有的,希望大家能稍稍包涵一下,在此謝過。
學(xué)習(xí)嵌入式開發(fā)首先你需要有一個(gè)良好的C語言功底,你需要對C語言可以說是熟練掌握,當(dāng)然了各種運(yùn)算符和表達(dá)式以及類型的范圍是基礎(chǔ)中的基礎(chǔ),判斷選擇循環(huán)的語句肯定不能用錯(cuò),static、extern,const,等的用法和對變量函數(shù)的作用域等的影響都是基礎(chǔ),typedef,struct,union,#define的各種用法和坑肯定要掌握,說實(shí)話掌握上面這些再加上指針和數(shù)組的用法基本上做單片機(jī)開發(fā)就沒有問題了,但是如果是嵌入式開發(fā),對C語言你還需要對各種數(shù)組,指針,數(shù)組指針,指針數(shù)組,函數(shù)指針,回調(diào)函數(shù)的用法熟練掌握,為什么呢?因?yàn)轵?qū)動(dòng)的部分基本上都是函數(shù)指針和回調(diào)函數(shù)來實(shí)現(xiàn)對各種接口的支持。這個(gè)是對C部分的一個(gè)要求,相對來說要求較高,不過貴在應(yīng)用嘛,快速掌握這些和通過幾年時(shí)間掌握這些其實(shí)就是時(shí)間的問題,相信多數(shù)人事耗不起這個(gè)時(shí)間的。
第二個(gè)你需要掌握的內(nèi)容是數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)是對數(shù)據(jù)的組織結(jié)構(gòu)(鄙人陋見),那么這個(gè)時(shí)候鏈表的強(qiáng)大就會(huì)出現(xiàn)在你的面前,很多人感覺數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)很難,的確很難,我給大家簡單的說下小弟以為的難點(diǎn)在哪里,難點(diǎn)在于他需要你去梳理數(shù)據(jù)與數(shù)據(jù)之間的關(guān)系,以前咱們是直接遍歷,現(xiàn)在要實(shí)現(xiàn)對數(shù)據(jù)的增刪改查加排序等功能,同時(shí)還要把這些數(shù)據(jù)當(dāng)做一個(gè)節(jié)點(diǎn)栓在一根(單鏈表等)或兩根繩子(雙鏈表等)上,那么怎么先給你的數(shù)據(jù)申請個(gè)位置(malloc一個(gè)節(jié)點(diǎn),按照你定義的節(jié)點(diǎn)形式)然后在鏈表上遍歷找到合適的位置插入就可以的,同時(shí)后面的繩子還不能斷對吧,保證數(shù)據(jù)的完整性。一本不錯(cuò)的書是《大話數(shù)據(jù)結(jié)構(gòu)》(我沒看完,不過很不錯(cuò))。那么對嵌入式來說,數(shù)據(jù)結(jié)構(gòu)學(xué)到那種程度就可以了呢?我相信這個(gè)是大家關(guān)注的問題,因?yàn)閿?shù)據(jù)結(jié)構(gòu)那么多東西,都學(xué)完還不累死了啊。我這里簡單的發(fā)表一下建議,數(shù)據(jù)結(jié)構(gòu)將前面的單鏈表,雙鏈表,循環(huán)鏈表,棧,隊(duì)列全部拿下(能自己畫畫節(jié)點(diǎn)的圖,最好能獨(dú)立實(shí)現(xiàn)代碼)就夠了,樹的話了解樹的遞歸創(chuàng)建和遍歷就可以的了,再內(nèi)核中出現(xiàn)最多的就是鏈表,希望大家好好掌握,為后面打下堅(jiān)實(shí)的基礎(chǔ)。而對于圖的話,那是算法工程師的事了,因?yàn)閳D的多數(shù)應(yīng)用都位于算法中,這里就不做過多的介紹了。不過還是要給大家強(qiáng)調(diào)一下,如果想深入學(xué)習(xí)嵌入式開發(fā),那么C語言的掌握還有數(shù)據(jù)結(jié)構(gòu)部分的思想是重重之中。
拿下C和數(shù)據(jù)結(jié)構(gòu)之后其實(shí)你發(fā)現(xiàn)你還是停留在裸機(jī)的開發(fā),要想進(jìn)入嵌入式的開發(fā),那么你需要切入到Ubuntu的學(xué)習(xí),當(dāng)然了個(gè)人建議前面的C語言和數(shù)據(jù)結(jié)構(gòu)也在Ubuntu下開發(fā)會(huì)更好,因?yàn)榍度胧介_發(fā)目前Ubuntu環(huán)境是最好上手的。(這里做個(gè)廣告,華清遠(yuǎn)見創(chuàng)客學(xué)院的整套嵌入式課程都是在Ubuntu的環(huán)境下學(xué)習(xí)的。)要想進(jìn)入U(xiǎn)buntu的學(xué)習(xí)那么你需要一把鑰匙,熟悉shell命令,能實(shí)現(xiàn)像windows下那樣復(fù)制粘貼拷貝重命名查找….,當(dāng)然了都是通過命令實(shí)現(xiàn)的,此外你還需要熟悉vi編輯器,這款最強(qiáng)大的ide,可以百度一下vi的配置,把在vi環(huán)境下的代碼編輯作為你初入嵌入式必須攻克的一個(gè)門檻(很重要),當(dāng)你基本的shell命令和vi使用拿下了之后,你就拿到了這把鑰匙(估計(jì)突擊這一塊也就兩三天就能拿下)。
后面你可以看到要想與內(nèi)核打交道你需要拿下文件IO和庫函數(shù),為什么呢 ,你會(huì)發(fā)現(xiàn)之前的C和數(shù)據(jù)結(jié)構(gòu)基本上都沒有對文件進(jìn)行過操作,而linux當(dāng)中號(hào)稱是”一切皆文件”,因?yàn)樵隍?qū)動(dòng)開發(fā)中不管你是什么設(shè)備對我來說都是一樣的,都只是一個(gè)文件而已,linux下有七種文件類型,bcd-lsp,大家可以自己去擴(kuò)展一下,那么在linux下將你所有的設(shè)備都抽象成各種文件,字符設(shè)備文件,塊設(shè)備文件,網(wǎng)絡(luò)設(shè)備文件,普通文件等等,這也就是說要想學(xué)習(xí)linux,學(xué)習(xí)驅(qū)動(dòng),你必須掌握linux下對各種文件的操作,比如對文件的打開,讀,寫,ioctl,關(guān)閉以及問目錄的打開關(guān)閉等。linux下提供了兩套標(biāo)準(zhǔn),一個(gè)是文件IO,一個(gè)是標(biāo)準(zhǔn)IO,區(qū)別簡單說就是是否有流緩沖區(qū)(具體可以自己去擴(kuò)展),這里區(qū)別一下linux下支持的是文件IO,其實(shí)這個(gè)難度也不大,基礎(chǔ)較好的人不用一周就能掌握,當(dāng)然應(yīng)用的熟練度肯定是有待斟酌的了。
那么拿下了文件IO和標(biāo)準(zhǔn)IO就萬事大吉了嗎?不是的,這里我們稍稍談一下linux內(nèi)核是怎么工作的,它是通過對進(jìn)程和線程的調(diào)度來完成各種任務(wù)的,那么這個(gè)時(shí)候你想一想,你該做什么啊?是的,沒猜錯(cuò),你需要把linux下7中進(jìn)程間通信方式給拿下,比如無名管道,有名管道,信號(hào),信號(hào)量,共享內(nèi)存和消息隊(duì)列以及網(wǎng)絡(luò)通信,不過由于進(jìn)程的資源消耗可能稍大,所以引入了線程,那么你需要掌握線程的同步和互斥的機(jī)制,同時(shí)再深入理解一下調(diào)度的概念以及與進(jìn)程線程間的關(guān)系,做個(gè)小項(xiàng)目練練手,那么恭喜你,學(xué)到這里已經(jīng)可以找到一份應(yīng)用層的工作了,比如網(wǎng)絡(luò)開發(fā)等等。
不過俗話說學(xué)無止境嘛,一條路走到黑,索性把驅(qū)動(dòng)也拿下吧,只有拿下驅(qū)動(dòng),你才能夠從最底層的硬件一直到最上層的應(yīng)用然后再從最上層的應(yīng)用到最底層的驅(qū)動(dòng)打通整個(gè)閉環(huán),你會(huì)發(fā)現(xiàn)很多東西對你來說都是小case的了,驅(qū)動(dòng)開發(fā)首選的硬件肯定是ARM的了,如果你有51和STM32等硬件基礎(chǔ),恭喜你這一塊很快就能突破,如果你是軟件出身不懂硬件,沒關(guān)系,有好的指導(dǎo)(比如說華清遠(yuǎn)見創(chuàng)客學(xué)院:又打廣告了,哈哈~~)你也可以快速上手,其實(shí)我們以前也想把路走好,但是就是不知道走那條路,所以走了很多彎路,說白了就是少個(gè)人引導(dǎo)你前進(jìn)。不過嘛,做技術(shù)的都喜歡按照自己的想法,自己認(rèn)為正確的方向前進(jìn),我也是,哈哈。說了很多廢話,簡單的說一下如何上手學(xué)習(xí)驅(qū)動(dòng),首先你需要將環(huán)境搭建起來,你需要知道如何編譯內(nèi)核,如何將內(nèi)核在板子上跑起來,這個(gè)是第一步。當(dāng)然了學(xué)驅(qū)動(dòng)寫的第一個(gè)驅(qū)動(dòng)肯定也是點(diǎn)燈(點(diǎn)燈大法好),然后慢慢的接觸一下linux下如果去寫一個(gè)簡單的字符設(shè)備驅(qū)動(dòng),學(xué)到后面你會(huì)發(fā)現(xiàn)驅(qū)動(dòng)基本上就是在套框架,比如字符設(shè)備框架,Platform框架,IIC框架,SPI框架,INPUT輸入子系統(tǒng)框架,misc,USB等等框架,那么驅(qū)動(dòng)到底是做什么的呢?驅(qū)動(dòng)向下操作硬件,向上提供接口,簡單點(diǎn)說就是你以前配置硬件寄存器讓硬件正常工作,那么你先在驅(qū)動(dòng)中也去相同方式配置硬件,只不過是要將配置硬件的過程何時(shí)的套入驅(qū)動(dòng)的框架當(dāng)中,同時(shí)向外面提供你對硬件的操作接口,比如open,read,write,ioctl的接口等,說白了就是在應(yīng)用層通過io操作去調(diào)用驅(qū)動(dòng)的接口然后再驅(qū)動(dòng)提供的接口中去修改硬件的狀態(tài),實(shí)現(xiàn)對硬件的控制。當(dāng)然了一些基礎(chǔ)知識(shí)如自旋鎖,互斥體,中斷底半部等等大家可以自行去了解。
上面那張圖其實(shí)就解釋完了,但是我們再想一下嵌入式系統(tǒng)是什么,以應(yīng)用為中心,對吧,那么我們需要在實(shí)戰(zhàn)中去應(yīng)用我們的知識(shí)和技術(shù)去解決實(shí)際的問題,這個(gè)時(shí)候有兩套框架,一個(gè)是CS,一個(gè)是BS,那么在這些基礎(chǔ)上你想往哪個(gè)方向發(fā)展都是可以的。因?yàn)槿味蕉}已通,修煉何種神功就看你的選擇了。
當(dāng)然了上面這些吃幾年是沒什么問題的,不過熱愛技術(shù)的大哥們一般都會(huì)再學(xué)兩個(gè)東東,一個(gè)叫做高級(jí)語言,可以選擇C++,JAVA,PYTHON三選一,一個(gè)叫做界面,可以選擇QT、android或者web等,這些都是增值哇,以上為小弟愚見。
4、學(xué)習(xí)嵌入式以后可以做些什么?(職業(yè)發(fā)展方向)
4.1、成為某個(gè)方向技術(shù)方面的核心,領(lǐng)域內(nèi)的一專多才的專家;
4.2、另一個(gè)是從項(xiàng)目中鍛煉起來,成為項(xiàng)目主管或是管理型人才;
4.3、再有就是因?yàn)榍度胧介_發(fā)的門檻相對較高,技術(shù)的附加值較高,可以利用自己的技術(shù)及行業(yè)經(jīng)驗(yàn)去創(chuàng)業(yè)。
4.4、可以做很多自己想做的事;