嵌入式開發(fā)怎么自學(xué)?有靠譜學(xué)習(xí)路線嗎?(嵌入式開發(fā)如何自學(xué))
嵌入式開發(fā)怎么自學(xué)?有靠譜學(xué)習(xí)路線嗎?(嵌入式開發(fā)如何自學(xué))
告訴你一個殘酷的現(xiàn)實(shí),即便告訴你學(xué)習(xí)方法和路徑,能堅(jiān)持下來的也寥寥無幾。
除此以外,還有學(xué)習(xí)過程中的突發(fā)情況,比如走彎路不知道,碰到問題沒人指導(dǎo)。
我覺得自學(xué)技術(shù)就是和人性弱點(diǎn)的博弈,枯燥、焦慮、迷茫、無助都是自學(xué)必經(jīng)的妖魔古怪。
能否取得西經(jīng),更多是對你魄力和毅力的考驗(yàn),哪怕你走過的彎路能繞地球一圈,最后還是能到達(dá)終點(diǎn)。
如果你明白這些,還想嘗試,請繼續(xù)往下看,否則不要輕易嘗試,半途而廢還不如不要開始。
以上,是我10年前自學(xué)轉(zhuǎn)行的感悟。
當(dāng)時(shí),從電氣專業(yè)轉(zhuǎn)行到嵌入式單片機(jī)軟件開發(fā),最終找到工作花了4個多月。
雖然現(xiàn)在門檻不一樣,但是方法可以通用。
說到嵌入式開發(fā),大多數(shù)人想到的是ARM、Linux、STM32。
這都太廣泛,嵌入式開發(fā)涵蓋的知識體系太龐大了,做了10年,我依然覺得我只是嵌入式開發(fā)這個知識海洋里的一根針而已。
但這不代表你需要花費(fèi)1年,甚至幾年的時(shí)間才能學(xué)會。
只要定位清晰,學(xué)習(xí)路徑正確,再加點(diǎn)點(diǎn)堅(jiān)持,3-5個月完全能從零基礎(chǔ)達(dá)到就業(yè)的程度。
先以找工作成功入行為首要目的,是一個成年人該有的覺悟,入行后有工資支撐了,同時(shí)也能在工作中深造,才能形成良性循環(huán)。
千萬不要一上來就想學(xué)成專家,容易餓死。
一、定位
嵌入式開發(fā)分為很多方向,從大方向來看分為嵌入式硬件開發(fā)和嵌入式軟件開發(fā)。
- 嵌入式硬件開發(fā)
主要負(fù)責(zé)設(shè)計(jì)產(chǎn)品電路、PCB layout、樣品焊接和調(diào)試、后期生產(chǎn)跟進(jìn)。
學(xué)習(xí)硬件,我個人感覺性價(jià)比是比較低的,主要有幾點(diǎn)原因。
①.硬件主要還是要通過實(shí)物不斷實(shí)踐學(xué)習(xí),不同的電路你要搭建不同的配套硬件測試你的理論是否正確。
這就導(dǎo)致需要付出的成本比較大,比如說要買示波器、萬用表、電烙鐵、焊錫、面包板、元器件等等。
還有就是不一定每個人都有這種學(xué)習(xí)環(huán)境,在自己睡覺的小房間焊接可不是一件好事。
②.目前具備實(shí)際產(chǎn)品參考意義的硬件教程很少,大多都是幾年甚至十幾年前的老教材,早都用不上了。
③.大多數(shù)普通硬件工程師崗位的工資都低于嵌入式軟件工程師。
④.現(xiàn)在電路集成度很高,動不動就是芯片方案解決,一般公司很難接觸到核心技術(shù),都是拿別人現(xiàn)成的電路用。
這種一般軟件開發(fā)個幾年都能自己設(shè)計(jì)電路了。
⑤.硬件抄板代價(jià)小,幾千塊能完完整整把你的硬件電路抄出來,軟件抄襲比較難,需要的成本高。
所以,我一直強(qiáng)調(diào)先把軟件學(xué)好,如果想走全棧再針對性去學(xué)硬件。
2.嵌入式軟件開發(fā)
嵌入式軟件開發(fā)又分為很多方向,比如說主流的有單片機(jī)開發(fā)、Linux驅(qū)動開發(fā)、Linux應(yīng)用開發(fā)、安卓應(yīng)用開發(fā)、FPGA/DSP開發(fā)等等。
兩大方向,還細(xì)分很多小方向,每個方向都是一個職位,每個方向所需要的學(xué)習(xí)的內(nèi)容體系都不同。
如果這個定位你不搞清楚,你就會覺得嵌入式開發(fā)很難,又要學(xué)硬件、又要學(xué)STM32、又要學(xué)ARM、又要學(xué)Linux,猴年馬月才能學(xué)完。
二、根據(jù)定位規(guī)劃學(xué)習(xí)路徑
當(dāng)初我處于對文憑、非本專業(yè)的自卑感,讓我選擇了比較好入門的單片機(jī)開發(fā)方向。
做的越久,我越發(fā)現(xiàn),單片機(jī)開發(fā)并不是和大家想象那樣比Linux方向簡單。
相反,Linux方向的開發(fā)很多都有現(xiàn)成的庫可以調(diào)用,而單片機(jī)開發(fā)大多數(shù)要從控制芯片引腳開始。
還有就是一些協(xié)議棧,比如說藍(lán)牙協(xié)議棧、Zigbee協(xié)議棧等等,也是非??简?yàn)?zāi)愕木幊坦Φ椎摹?/span>
這些協(xié)議棧有非常多值得學(xué)習(xí)借鑒的地方,你完全可以剪裁、移植、改編、優(yōu)化成自己的程序架構(gòu)為自己產(chǎn)品所用。
現(xiàn)成的系統(tǒng),不管是實(shí)時(shí)操作系統(tǒng),還是Linux,既要做到通用性、又要做到移植性等苛刻條件,所以普遍比較占用微控制器和處理器資源。
而自己寫架構(gòu)就不同,你完全可以根據(jù)自己的產(chǎn)品定制,這樣既保證系統(tǒng)的優(yōu)點(diǎn),又能最大程度減少芯片資源浪費(fèi)。
這比你直接用所謂的RTOS和操作系統(tǒng)水平高多了。
下面,針對我最熟悉的單片機(jī)開發(fā)方向,根據(jù)當(dāng)下市場對這個職位的需求,系統(tǒng)講解下這個方向的學(xué)習(xí)路徑。
- c語言基礎(chǔ)
單片機(jī)支持c語言和匯編語言來編寫程序,目前主流都用c語言,匯編主要做小家電消費(fèi)類產(chǎn)品,可能你10年都用不上,所以以學(xué)c語言為主。
這塊的教程也泛濫了,但是針對單片機(jī)的c語言不多,大多數(shù)以做純軟件為基礎(chǔ)講解的。
雖然都是c語言,實(shí)際還是有差別的,比如說寄存器配置這些。
無際單片機(jī)編程有一套針對單片機(jī)c語言編程的教程,結(jié)合了工作當(dāng)中最常用到的語法,節(jié)約大家學(xué)習(xí)時(shí)間。
教程也是完全開源的,可以到小坡站找無際單片機(jī)編程直接看。
2. 電路基礎(chǔ)
這個環(huán)節(jié)進(jìn)坑最多的就是死磕模電,我也走過這種坑,學(xué)到三極管放大就開始各種數(shù)學(xué)公式,學(xué)不動了。
為此也差點(diǎn)放棄,工作久了才發(fā)現(xiàn),書本教程數(shù)學(xué)公式都用不上,三極管實(shí)際應(yīng)用最多的就是開關(guān)作用。
假如是NPN型的三極管,你只要記住B極電壓大于E極電壓0.7V以上,三極管就能導(dǎo)通就行了。
不同型號的三極管可能不一定是0.7V導(dǎo)通,也有更小的,但實(shí)際電路設(shè)計(jì)要讓三極管導(dǎo)通時(shí),E極一般接地,B極由單片機(jī)引腳控制,電壓都會遠(yuǎn)遠(yuǎn)大于0.7V。
就是這種細(xì)節(jié)的區(qū)別,如果你去死磕三極管截止、放大、飽和,學(xué)習(xí)效率會慢幾倍。
3. 51單片機(jī)
很多人說51單片機(jī)淘汰了,沒必要學(xué),純屬外行瞎扯。
越原始的單片機(jī),你越能接觸到底層開發(fā),51單片機(jī)能讓你理解單片機(jī)的底層原理,如何配置使用芯片資源。
STM32單片機(jī)雖然火,但是都是封裝好的庫,做應(yīng)用多一點(diǎn),一般不需要配置寄存器。
這樣,你永遠(yuǎn)無法知道單片機(jī)的原理。
這個階段必須要配備一個開發(fā)板或者通過項(xiàng)目去學(xué)習(xí)。
單片機(jī)是一門偏向硬件控制的技術(shù),不像純軟件一臺電腦就行。
建議新手從STC89C52RC單片機(jī)入手,目前市面上開發(fā)板很多也是用這個芯片做的,燒錄工具便宜、資料教程豐富。
4. 51單片機(jī)項(xiàng)目
這一個階段最重要,可以說比你后面學(xué)STM32還重要。
你熟練使用STM32,不一定有用51單片機(jī)做過2-3個項(xiàng)目的人牛逼。
單片機(jī)只是一個工具,怎么把這個工具通過自己天馬行空的想象做成落地產(chǎn)品才是我們最終目標(biāo)。
這個階段就是檢驗(yàn)?zāi)闱懊鎸W(xué)習(xí)成果最好的時(shí)候,開頭會比較煎熬,因?yàn)槟X子里沒有思路,有思路有不知道怎么用代碼去實(shí)現(xiàn)。
最好的方法就是先學(xué)習(xí)別人做的項(xiàng)目,看下別人功能實(shí)現(xiàn)思路是什么,代碼是怎么寫的。
最后自己再根據(jù)自己想法寫一遍,寫完分析一下自己的代碼和別人的代碼各有什么優(yōu)缺點(diǎn)。
就是這煎熬的過程,別去想捷徑了。
5. C語言進(jìn)階
大多數(shù)51單片機(jī)程序還是比較簡單的,不用c語言的高級語法指針、結(jié)構(gòu)體也照樣能實(shí)現(xiàn)功能。
但是后面這些c語言高級語法的用法就顯得尤為重要了,可以說不懂指針、結(jié)構(gòu)體這些基礎(chǔ)知識,你永遠(yuǎn)只能停留在初級水平。
STM32單片機(jī)的固件庫也大量使用了指針、結(jié)構(gòu)體。
這塊我們無際單片機(jī)編程也有配套比較完善的系統(tǒng)教程,其中包括枚舉、指針、結(jié)構(gòu)體、回調(diào)函數(shù)、隊(duì)列算法、任務(wù)管理等非常使用的知識。
為你后續(xù)學(xué)習(xí)STM32,RTOS打下扎實(shí)基礎(chǔ),教程也是完全開源的,在小破站直接找到。
當(dāng)然如果只是單純學(xué)習(xí)STM32,只需要學(xué)指針、結(jié)構(gòu)體就足夠了,如果你沒一定的項(xiàng)目經(jīng)驗(yàn),里面很多知識點(diǎn)可能聽不懂。
6. STM32單片機(jī)
我學(xué)STM32單片機(jī)是通過項(xiàng)目學(xué)會的,當(dāng)時(shí)公司有新產(chǎn)品,要把原來NXP的替換掉,價(jià)格太貴了。
有實(shí)際項(xiàng)目驅(qū)動,你學(xué)習(xí)會更有針對性一點(diǎn),效率也更高。
當(dāng)然通過開發(fā)板學(xué)習(xí)也是可以的,不用把所有外設(shè)資源學(xué)完,只需要學(xué)習(xí)最常用的就可以了,后續(xù)工作需要了再針對性學(xué)習(xí)也很簡單。
具體要學(xué)哪些外設(shè),可以參考我上面那個思維導(dǎo)圖。
7. STM32項(xiàng)目
到這里,已經(jīng)是入門了,剩下的重點(diǎn)就是提高你的編程思維和水平。
雖然我們最理想的自學(xué),省錢嘛..
但我建議最快的方法就是找一個大神帶項(xiàng)目,一個項(xiàng)目頂你自學(xué)幾年。
我并沒夸張的意思,因?yàn)樽约鹤隽?0年,其實(shí)真正進(jìn)步最大的也就那2,3年接觸到大神代碼的時(shí)候。
不過當(dāng)時(shí)他已經(jīng)離職了,完全靠自己死磕,磕了幾年才完全吃透。
如果實(shí)在不舍得花大錢,可以到某寶買一些項(xiàng)目套件自己DIY,比如說無人機(jī)、尋跡小車之類的項(xiàng)目。
不過這種項(xiàng)目只能讓你熟練編程,不能提升你的認(rèn)知水平,大多數(shù)都是以實(shí)現(xiàn)功能為主。
實(shí)際產(chǎn)品開發(fā)的時(shí)候需要考慮到程序可擴(kuò)展性、可移植性、執(zhí)行效率這些東西。
不知不覺肝了3000多字,純手打原創(chuàng),如果對你有幫助,麻煩給我安排個三連鼓勵。
最后祝大家學(xué)有所成!