嵌入式真的沒(méi)前途嗎?
大家好,我是小麥。
從事嵌入式相關(guān)行業(yè),差不多快有10年時(shí)間了,走過(guò)很多彎路,踩過(guò)很多坑。
很多人會(huì)問(wèn),嵌入式真的沒(méi)有前途嗎?這個(gè)我其實(shí)也無(wú)法回答。用發(fā)展的眼光來(lái)看,萬(wàn)物都有周期。
這個(gè)和嵌入式無(wú)關(guān),和行業(yè)有關(guān),一個(gè)行業(yè)的增長(zhǎng)有關(guān),和資本有關(guān),和郭嘉發(fā)展有關(guān)。所以只有天時(shí)地利人和,而這個(gè)人和,就是你自己的選擇。
對(duì)此這是我的看法,也歡迎大家發(fā)表自己的看法。
如果打算入門(mén)嵌入式學(xué)習(xí),那就和大家聊聊嵌入式學(xué)習(xí)路線。
嵌入式即嵌入式系統(tǒng),IEEE(美國(guó)電氣和電子工程師協(xié)會(huì))對(duì)其定義是用于控制、監(jiān)視或者輔助操作機(jī)器和設(shè)備的裝置,是一種專用的計(jì)算機(jī)系統(tǒng)。
國(guó)內(nèi)普遍認(rèn)同的嵌入式系統(tǒng)定義是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗等嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。
嵌入式是一個(gè)比較多學(xué)科綜合的方向,有很多細(xì)分的方向。其實(shí)可以直接切入某個(gè)細(xì)分的領(lǐng)域,然后介紹一下學(xué)習(xí)路線,比如單片機(jī)開(kāi)發(fā),Linux應(yīng)用開(kāi)發(fā),Linux驅(qū)動(dòng)開(kāi)發(fā)。
但是不難發(fā)現(xiàn),雖然是很多細(xì)分,但是需要學(xué)習(xí)的知識(shí)有所交叉,有的又相互獨(dú)立。
嵌入式的相****聘崗位,基礎(chǔ)技能樹(shù)要求其實(shí)相差不大,不過(guò)有很多對(duì)行業(yè)綁定比較深的崗位,會(huì)要求有行業(yè)經(jīng)驗(yàn)和這個(gè)行業(yè)沉淀的相關(guān)技能;
- 比如汽車電子要求can,autosar;
- 物聯(lián)網(wǎng)要求網(wǎng)絡(luò)協(xié)議,單片機(jī),RTOS,WiFi,Bluetooth等等;
- BSP工程師要求掌握Linux內(nèi)核和各種子系統(tǒng);
- 機(jī)器人相關(guān)要求掌握ROS;
崗位還有很多,這里就不過(guò)多列舉了,下面分享一下我認(rèn)為的比較萬(wàn)金油的學(xué)習(xí)路線。
下面是我整理的思維導(dǎo)圖。簡(jiǎn)單來(lái)說(shuō)一下傳統(tǒng)的學(xué)習(xí)路線。
編程基礎(chǔ)C語(yǔ)言這是必須要精通的。C語(yǔ)言非常靈活,可以進(jìn)行單片機(jī)開(kāi)發(fā),驅(qū)動(dòng)開(kāi)發(fā),固件開(kāi)發(fā),內(nèi)核開(kāi)發(fā),應(yīng)用開(kāi)發(fā),幾乎都可以用到。
比如著名的操作系統(tǒng)Linux,主要就是C語(yǔ)言實(shí)現(xiàn)的,當(dāng)然還有很多基于C語(yǔ)言的項(xiàng)目,這里就不一一介紹了。
學(xué)習(xí)C語(yǔ)言,我比較喜歡浙大翁愷老師的課程。
C++C++在嵌入式中更多是應(yīng)用開(kāi)發(fā)方向,因?yàn)閷?duì)C有較好的兼容,所以在硬件方面仍然使用C進(jìn)行編程,而較為復(fù)雜的業(yè)務(wù)邏輯部分,則使用面向?qū)ο蟮腃++進(jìn)行封裝和實(shí)現(xiàn)。
C++和C的混編也是非常實(shí)用的。
數(shù)據(jù)結(jié)構(gòu)與算法合理地使用數(shù)據(jù)結(jié)構(gòu),它會(huì)讓的開(kāi)發(fā)事半功倍,常用的數(shù)據(jù)結(jié)構(gòu),比如隊(duì)列,鏈表其實(shí)在嵌入式的開(kāi)發(fā)中十分常見(jiàn),當(dāng)然還有hashmap,二叉樹(shù)等等。
如果編程語(yǔ)言是武器,那么數(shù)據(jù)結(jié)構(gòu)就是招式。什么樣的場(chǎng)景,使用什么樣的招式,數(shù)據(jù)結(jié)構(gòu)里大致都寫(xiě)了。
其他編程語(yǔ)言還有很多其他的編程語(yǔ)言,我這里列舉幾個(gè)。
shell這是腳本語(yǔ)言,在Linux上比較常見(jiàn),一般來(lái)說(shuō),掌握shell,可以大大提高工作效率,這個(gè)是強(qiáng)烈建議熟練掌握的,遇到不懂的可以多看man page;
python很方便,大大提高效率。用于驗(yàn)證一些算法功能,或者辦公自動(dòng)化。
硬件知識(shí)這里的硬件知識(shí)并不是對(duì)于做純硬件開(kāi)發(fā)的路線,而是做嵌入式軟件開(kāi)發(fā),需要掌握哪些硬件知識(shí),下面詳細(xì)來(lái)說(shuō)一說(shuō);
硬件基礎(chǔ)具備最基礎(chǔ)的硬件知識(shí)素養(yǎng),如果是做驅(qū)動(dòng)的開(kāi)發(fā),比如BSP工程師,必須具備最關(guān)鍵的兩點(diǎn),可以看懂芯片的Datasheet,可以看懂原理圖,因?yàn)橐霭鍣C(jī)的開(kāi)發(fā)。
常見(jiàn)的通訊協(xié)議比如UART,I2C,SPI協(xié)議等等,這三個(gè)比較常見(jiàn),也相對(duì)比較簡(jiǎn)單。其他還有很多通信協(xié)議,這里就不再介紹了。
常見(jiàn)的片上外設(shè)比如gpio,adc,dac,watchdog,timer,pwm這些,原理都是一樣的,但是一般的SOC基本也都是類似的外設(shè)。
常見(jiàn)工具的使用示波器,萬(wàn)用表,電源的使用,至少不能經(jīng)常把正負(fù)極接錯(cuò)。示波器便于用來(lái)查看時(shí)序,開(kāi)發(fā)的時(shí)候方便排查問(wèn)題。
嵌入式系統(tǒng)嵌入式操作系統(tǒng)的話,通??淳唧w的需求進(jìn)行劃分,常用的實(shí)時(shí)系統(tǒng)有ucos,freertos,rtthread,vxworks等等,而Linux系統(tǒng)也十分常用;
實(shí)時(shí)系統(tǒng)通常來(lái)說(shuō),實(shí)時(shí)系統(tǒng)大多用于用于控制的場(chǎng)合,比如ucos,freertos,rtthread,vxworks等等,都是實(shí)時(shí)系統(tǒng)。
Linux系統(tǒng)Linux系統(tǒng)應(yīng)用比較廣泛,智能硬件,監(jiān)控設(shè)備,路由器,手機(jī),汽車等等,都有它的身影。大致方向主要分為L(zhǎng)inux驅(qū)動(dòng)和Linux應(yīng)用,兩者的界限已經(jīng)模糊不清。技術(shù)架構(gòu)上分為用戶空間和內(nèi)核空間,如下圖所示;
Linux
應(yīng)用如果是應(yīng)用開(kāi)發(fā),其實(shí)和純軟件開(kāi)發(fā)差不多了。
基礎(chǔ)內(nèi)容,其實(shí)前面也有一部分提及,Linux系統(tǒng)編程,多線程,操作系統(tǒng)層面的基本知識(shí),互斥,信號(hào)量,網(wǎng)絡(luò)編程等等。
具體應(yīng)用,比如音視頻的開(kāi)發(fā),運(yùn)動(dòng)控制,機(jī)器人開(kāi)發(fā)等等;
推薦看《Unix環(huán)境高級(jí)編程》,這是基礎(chǔ)。
驅(qū)動(dòng)對(duì)于底層知識(shí)的掌握要求比較高,至少板機(jī)Linux的編譯,剪裁,移植等內(nèi)容。
可以根據(jù)具體硬件需求,添加相應(yīng)的驅(qū)動(dòng)到系統(tǒng)中,因?yàn)橄到y(tǒng)已經(jīng)規(guī)定好相應(yīng)的驅(qū)動(dòng)框架,因此需要了解各種內(nèi)核子系統(tǒng)和各種類型的驅(qū)動(dòng)。比如字符設(shè)備驅(qū)動(dòng),塊設(shè)備驅(qū)動(dòng),設(shè)備樹(shù)的使用等等。
深入學(xué)習(xí)子系統(tǒng)也是一個(gè)難點(diǎn),可以幫忙更好地了解Linux,例如進(jìn)程調(diào)度(SCHED)、內(nèi)存管理(MM)、虛擬文件系統(tǒng)(VFS)、網(wǎng)絡(luò)接口(NET)和進(jìn)程間通信(IPC)。
比較推薦的學(xué)習(xí)資源,宋寶華老師的Linux內(nèi)核4.0驅(qū)動(dòng)書(shū)籍,韋東山老師的驅(qū)動(dòng)視頻,互聯(lián)網(wǎng)時(shí)代,搜一下就有了。
總之,技術(shù)在于積累。
其他上面說(shuō)了這么多,如果要保持技術(shù)的精進(jìn),需要保證持續(xù)學(xué)習(xí),多看優(yōu)秀的源代碼,找優(yōu)秀的開(kāi)源項(xiàng)目。
非常規(guī)學(xué)習(xí)路線在掌握部分基礎(chǔ)知識(shí)之后,也可以嘗試這種學(xué)習(xí)路線,按照項(xiàng)目的形式進(jìn)行學(xué)習(xí)。
定一個(gè)目標(biāo)項(xiàng)目,例如;
在Linux系統(tǒng)上實(shí)現(xiàn)一個(gè)程序,如果非得和硬件沾邊,比如做一個(gè)人臉識(shí)別的門(mén)禁系統(tǒng);
比如要在一個(gè)板子上移植Linux系統(tǒng),并添加驅(qū)動(dòng);
用單片機(jī)開(kāi)發(fā)一個(gè)小項(xiàng)目,完成軟硬件的設(shè)計(jì);
以上完全是三個(gè)不同的方向了,因?yàn)槊總€(gè)人的具體情況都不相同,可以根據(jù)自己的技術(shù)棧和興趣愛(ài)好來(lái)做,想不到做什么的,找一些開(kāi)源的項(xiàng)目,自己復(fù)刻一下,也是很好的。
有了目標(biāo)之后,將任務(wù)拆解,這中間會(huì)遇到很多知識(shí)盲區(qū),會(huì)用到上面我提到過(guò)的很多知識(shí),這時(shí)候你就要去學(xué)習(xí),去吸收,帶著目的去學(xué)習(xí)和實(shí)踐,效果反而會(huì)更好。
總結(jié)這篇文章總體上介紹了嵌入式的學(xué)習(xí)路線,相對(duì)寬泛和簡(jiǎn)略,由于嵌入式的知識(shí)體系確實(shí)很龐大,單純從個(gè)人角度去寫(xiě),還有很多片面和局限的地方。
希望對(duì)一些想要加入這個(gè)方向的同學(xué)有所幫助,如果本文存在錯(cuò)誤或者需要改進(jìn)的地方,歡迎您的建議。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂) 攝像頭相關(guān)文章:攝像頭原理