路線:從零基礎(chǔ)到就業(yè)的完整攻略)
看到這個(gè)標(biāo)題點(diǎn)進(jìn)來(lái)的朋友估計(jì)心里都犯過(guò)同一個(gè)嘀咕嵌入式這行是不是真得砸錢才能入我做了這些年嵌入式開(kāi)發(fā)見(jiàn)過(guò)太多花3萬(wàn)報(bào)班出來(lái)連指針回調(diào)都寫(xiě)不利索的學(xué)員也見(jiàn)過(guò)完全靠免費(fèi)資源自學(xué)一把上岸的狠人。這篇不賣課、不恰飯把我自己走過(guò)的彎路、帶新人時(shí)反復(fù)驗(yàn)證過(guò)的路線從零基礎(chǔ)到就業(yè)摸爬滾打完整捋一遍。我要聊的不只是“收藏哪些免費(fèi)視頻”而是一套能真正落地到投簡(jiǎn)歷、過(guò)面試的嵌入式學(xué)習(xí)路線圖覆蓋C語(yǔ)言、單片機(jī)、嵌入式Linux、項(xiàng)目實(shí)戰(zhàn)、面試沖刺五個(gè)階段給想入行的人一份可以直接照著執(zhí)行的參考方案。1. 先說(shuō)結(jié)論3萬(wàn)檔培訓(xùn)班到底在賣什么1.1 培訓(xùn)班的真實(shí)成本與信息差我認(rèn)識(shí)不少?gòu)呐嘤?xùn)班出來(lái)的同事倒不是說(shuō)他們學(xué)得不行而是這筆賬算下來(lái)太虧。市面上主流的嵌入式培訓(xùn)班價(jià)格普遍在2萬(wàn)到3萬(wàn)5之間周期三到六個(gè)月教的內(nèi)容拆開(kāi)看基本就三塊C語(yǔ)言半個(gè)月、STM32裸機(jī)一個(gè)月、嵌入式Linux應(yīng)用和驅(qū)動(dòng)兩個(gè)月最后加一個(gè)項(xiàng)目實(shí)戰(zhàn)。這些內(nèi)容本身沒(méi)毛病問(wèn)題是單價(jià)高得離譜。為什么敢收3萬(wàn)核心是賣“信息差”和“氛圍感”。很多轉(zhuǎn)行的人不知道B站、GitHub、大學(xué)公開(kāi)課、芯片原廠官網(wǎng)文檔里有大量免費(fèi)且質(zhì)量更高的資料也不知道有個(gè)叫“嵌入式學(xué)習(xí)路線”的東西可以自己規(guī)劃。培訓(xùn)班所謂的“就業(yè)保障”說(shuō)穿了就是幫忙改簡(jiǎn)歷、內(nèi)推幾個(gè)合作企業(yè)這些服務(wù)你自己花點(diǎn)心思一樣能搞定。1.2 免費(fèi)資源早就夠用了缺的是路線我遇到過(guò)最可惜的一種情況資料囤了幾百個(gè)G硬盤都裝滿了打開(kāi)卻不知道先看哪個(gè)。B站收藏夾里躺著20套C語(yǔ)言教程GitHub上star了一堆嵌入式開(kāi)源項(xiàng)目結(jié)果一年過(guò)去還在學(xué)“變量和數(shù)據(jù)類型”。這就是典型的“資源過(guò)載”。免費(fèi)內(nèi)容不是太少是太多多到把人淹死。所以這篇文章的核心不是再給你堆一堆鏈接而是幫你把路線理出來(lái)每個(gè)階段該學(xué)什么、學(xué)到什么程度可以進(jìn)入下一階段、遇到瓶頸怎么判斷是自己沒(méi)練夠還是方向錯(cuò)了。有了這條主線你再看那些免費(fèi)資料目光自然會(huì)聚焦。提示免費(fèi)的才是真正檢驗(yàn)學(xué)習(xí)能力的。培訓(xùn)班替你規(guī)劃好了一切你只需要跟著走但自學(xué)的每一步都要自己決策這個(gè)過(guò)程本身就在鍛煉嵌入式工程師最需要的能力——獨(dú)立排查和解決問(wèn)題。2. 第一階段把C語(yǔ)言焊死在腦子里再碰板子2.1 C語(yǔ)言要學(xué)到什么程度才算過(guò)關(guān)很多新手一上來(lái)就買開(kāi)發(fā)板這其實(shí)是本末倒置。嵌入式開(kāi)發(fā)的核心語(yǔ)言是C寄存器操作、協(xié)議解析、RTOS任務(wù)調(diào)度、Linux驅(qū)動(dòng)底層全是你對(duì)C語(yǔ)言的理解深度。C語(yǔ)言不扎實(shí)板子到手也只能復(fù)制粘貼例程換一顆芯片、換一個(gè)平臺(tái)立刻抓瞎。那C語(yǔ)言學(xué)到什么程度能過(guò)關(guān)別信“看完某本書(shū)就行”給自己定幾個(gè)可以自測(cè)的硬指標(biāo)指針和數(shù)組的關(guān)系、指針數(shù)組和數(shù)組指針能隨口說(shuō)清結(jié)構(gòu)體、共用體、枚舉在實(shí)際工程里用得很自然函數(shù)指針和回調(diào)機(jī)制寫(xiě)過(guò)至少兩個(gè)實(shí)際例子鏈表至少能手寫(xiě)單鏈表和雙向鏈表的增刪改查指針和內(nèi)存的“坑”能自己畫(huà)圖分析出來(lái)。這幾個(gè)點(diǎn)不是拿來(lái)當(dāng)理論考的而是后面寫(xiě)單片機(jī)驅(qū)動(dòng)、看嵌入式開(kāi)源項(xiàng)目源碼時(shí)天天要用的。隨便打開(kāi)一個(gè)嵌入式開(kāi)源項(xiàng)目比如GitHub上那些熱門的嵌入式架構(gòu)設(shè)計(jì)項(xiàng)目你會(huì)發(fā)現(xiàn)核心邏輯基本都是結(jié)構(gòu)體加函數(shù)指針在組織。你在源碼里迷路多半不是邏輯看不懂是C語(yǔ)言功底沒(méi)到位。2.2 零成本搭建學(xué)習(xí)環(huán)境先別急買板子學(xué)C語(yǔ)言階段完全不需要買開(kāi)發(fā)板電腦上有編譯器就夠了。Windows上用VS Code加MinGW或者直接用Dev-CLinux環(huán)境本身自帶GCCmacOS裝Xcode或者Command Line Tools也行。我的建議是盡早接觸Linux下的編輯方式和編譯命令因?yàn)楹罄m(xù)嵌入式開(kāi)發(fā)基本都是命令行環(huán)境。想省事的話可以用Docker跑一個(gè)Ubuntu容器網(wǎng)上搜“ubuntu docker嵌入式環(huán)境”有很多現(xiàn)成方案比自己裝雙系統(tǒng)省心得多也不怕把電腦搞壞。這個(gè)階段的關(guān)鍵動(dòng)作是“每天寫(xiě)代碼”而不是“每天看視頻”。我的習(xí)慣是給自己布置小任務(wù)字符串處理、成績(jī)排序、電話本管理、命令行版貪吃蛇。這些看起來(lái)跟嵌入式?jīng)]什么關(guān)系但寫(xiě)的過(guò)程中你會(huì)被迫接觸文件讀寫(xiě)、結(jié)構(gòu)體數(shù)組、指針操作和鏈表這些能力后面全用得上。注意C語(yǔ)言的坑一定要自己踩一遍才記得住棧溢出、野指針、數(shù)組越界每個(gè)詞你都背過(guò)但只有真正調(diào)試過(guò)才會(huì)刻進(jìn)肌肉記憶。2.3 計(jì)算機(jī)基礎(chǔ)課別跳過(guò)尤其是這兩門除了C語(yǔ)言有兩門課一定不能省數(shù)據(jù)結(jié)構(gòu)與計(jì)算機(jī)組成原理。好多自學(xué)的人覺(jué)得嵌入式是偏向硬件的軟件工作數(shù)據(jù)結(jié)構(gòu)好像不重要這是個(gè)誤解。嵌入式領(lǐng)域大量代碼本質(zhì)是在做數(shù)據(jù)處理傳感器采集的數(shù)據(jù)要緩沖、濾波、存儲(chǔ)網(wǎng)絡(luò)協(xié)議棧里各種隊(duì)列和緩沖區(qū)的管理甚至RTOS的任務(wù)調(diào)度表全都建立在數(shù)據(jù)結(jié)構(gòu)之上。只學(xué)鏈表可能不夠棧、隊(duì)列、二叉樹(shù)至少要懂原理和適用場(chǎng)景。計(jì)算機(jī)組成原理則是你理解“嵌入式”三個(gè)字的鑰匙。為什么同一段C代碼在PC上和單片機(jī)上跑結(jié)果不同為什么有些寫(xiě)法效率差幾十倍這都要回到CPU怎么取指令、內(nèi)存怎么尋址、寄存器怎么工作這些底層機(jī)制去找答案。推薦看大學(xué)公開(kāi)課或者經(jīng)典的《計(jì)算機(jī)組成與設(shè)計(jì)》不要求全懂但存儲(chǔ)層次、總線結(jié)構(gòu)、中斷機(jī)制這幾章必須啃下來(lái)。3. 第二階段單片機(jī)裸機(jī)開(kāi)發(fā)嵌入式真正的入場(chǎng)券3.1 選型不糾結(jié)從STM32入門是最大公約數(shù)到這一階段可以買板子了。單片機(jī)選型問(wèn)題上我直接給答案入門階段選STM32別猶豫。雖然網(wǎng)上總有人爭(zhēng)論“51單片機(jī)才是經(jīng)典”也有人鼓吹ESP32功能強(qiáng)、帶WiFi但對(duì)零基礎(chǔ)的人來(lái)說(shuō)STM32的資料豐富程度、社區(qū)活躍度、原廠Std庫(kù)和HAL庫(kù)的成熟度都是其他芯片沒(méi)法比的。你可以說(shuō)它是“爛大街”的選擇但正因?yàn)闋€大街你踩過(guò)的坑幾乎都有人踩過(guò)搜一下就能找到答案這對(duì)新手太重要了。市面上的開(kāi)發(fā)板從幾十塊到兩三百都有新手階段我建議選一個(gè)帶有LED、按鍵、OLED屏幕、溫濕度傳感器的綜合板子就夠了。不是說(shuō)外設(shè)越多越好而是前期把基礎(chǔ)外設(shè)吃透比功能花哨更重要。另外能買“最小系統(tǒng)板”加面包板自己搭電路的話比直接用集成開(kāi)發(fā)板對(duì)硬件的理解深得多這個(gè)看你自己的動(dòng)手意愿。3.2 外設(shè)驅(qū)動(dòng)不是背代碼是讀數(shù)據(jù)手冊(cè)單片機(jī)學(xué)習(xí)的核心不是“把例程燒進(jìn)去看到現(xiàn)象”而是理解一個(gè)外設(shè)為什么這么配置。以GPIO為例你要搞清楚一個(gè)引腳在輸入輸出模式下內(nèi)部電路長(zhǎng)了什么樣上下拉電阻有什么用開(kāi)漏輸出和推挽輸出的區(qū)別在哪。這些問(wèn)題不在例程里在芯片數(shù)據(jù)手冊(cè)里。英文數(shù)據(jù)手冊(cè)看著頭疼但這是嵌入式工程師的日常早適應(yīng)早受益。STM32的學(xué)習(xí)路徑我建議這樣拆解下面這張表值得收藏學(xué)習(xí)模塊核心知識(shí)點(diǎn)自測(cè)標(biāo)準(zhǔn)GPIO輸入輸出模式、上下拉、復(fù)用功能不查手冊(cè)能獨(dú)立點(diǎn)燈和按鍵掃描中斷系統(tǒng)外部中斷、NVIC優(yōu)先級(jí)、中斷服務(wù)函數(shù)寫(xiě)法能解釋中斷響應(yīng)的大致時(shí)序定時(shí)器時(shí)基、PWM輸出、輸入捕獲能寫(xiě)出PWM調(diào)光燈和頻率測(cè)量串口波特率、發(fā)送接收中斷、DMA能完成上位機(jī)命令解析I2C / SPI時(shí)序、讀寫(xiě)流程、從設(shè)備地址能驅(qū)動(dòng)OLED和傳感器ADC采樣原理、參考電壓、多通道能讀取電壓值并做簡(jiǎn)單濾波每個(gè)模塊不要跟著視頻抄一遍就完事抄完之后關(guān)掉參考代碼對(duì)著芯片手冊(cè)自己重新寫(xiě)一遍。能寫(xiě)出來(lái)才說(shuō)明你真的理解了。寫(xiě)不出來(lái)的地方再回頭看資料這樣一輪下來(lái)比單純看三遍視頻都管用。3.3 用藍(lán)橋杯嵌入式做階段自檢性價(jià)比很高單片機(jī)學(xué)完一輪之后很多人會(huì)陷入“不知道學(xué)得怎么樣”的迷茫。我有一個(gè)實(shí)操性很強(qiáng)的建議參加一次藍(lán)橋杯嵌入式比賽。別聽(tīng)到“競(jìng)賽”兩個(gè)字就緊張藍(lán)橋杯嵌入式組的設(shè)計(jì)初衷是面向大學(xué)生但題目風(fēng)格非常貼近實(shí)際工程——給你一塊官方板要求在限定時(shí)間內(nèi)完成按鍵處理、LCD顯示、傳感器讀取、串口通信等任務(wù)組合。我見(jiàn)過(guò)不少非科班自學(xué)者拿藍(lán)橋杯國(guó)賽真題當(dāng)練習(xí)題來(lái)刷效果出奇的好。因?yàn)檎骖}是有標(biāo)準(zhǔn)答案和評(píng)分點(diǎn)的你做完之后能很客觀地知道自己到底幾斤幾兩。第十七屆藍(lán)橋杯嵌入式國(guó)賽真題在網(wǎng)上都能找到題目和參考代碼建議拿來(lái)當(dāng)作階段測(cè)驗(yàn)。如果你能在不參考例程的情況下獨(dú)立完成一道完整真題的百分之六七十單片機(jī)裸機(jī)這一關(guān)就算過(guò)了。提示比賽名次對(duì)找工作并不是決定性的但它給你提供的“階段性反饋”才是無(wú)價(jià)的。自學(xué)最怕悶頭學(xué)不知道自己在什么水平做題就是最快的校準(zhǔn)方式。4. 第三階段單片機(jī)和嵌入式Linux的分水嶺怎么選4.1 裸機(jī)和Linux的本質(zhì)差別一張圖想清楚學(xué)完單片機(jī)裸機(jī)開(kāi)發(fā)你就站在了嵌入式行業(yè)里最重要的一條分岔路口往上是嵌入式Linux的方向還是繼續(xù)在MCU領(lǐng)域深耕。這兩條路沒(méi)有高下之分但本質(zhì)差別必須搞清楚。裸機(jī)開(kāi)發(fā)說(shuō)直白點(diǎn)就是“一個(gè)人的樂(lè)隊(duì)”主循環(huán)里輪詢所有外設(shè)事件來(lái)了處理事件數(shù)據(jù)來(lái)了處理數(shù)據(jù)所有資源都由你一個(gè)人調(diào)度任何地方卡住整個(gè)系統(tǒng)就卡住。而嵌入式Linux是“一個(gè)公司”的玩法Linux內(nèi)核負(fù)責(zé)CPU管理、內(nèi)存管理、進(jìn)程調(diào)度、文件系統(tǒng)你要做的是作為這個(gè)大公司里的一個(gè)部門員工寫(xiě)好你的驅(qū)動(dòng)、跑好你的應(yīng)用進(jìn)程。公司有公司的規(guī)矩API、權(quán)限、調(diào)度策略但你不必操心公司日常運(yùn)轉(zhuǎn)。對(duì)應(yīng)到具體崗位裸機(jī)方向更偏單片機(jī)開(kāi)發(fā)、物聯(lián)網(wǎng)節(jié)點(diǎn)、消費(fèi)電子控制嵌入式Linux方向則對(duì)應(yīng)智能設(shè)備、車載、網(wǎng)關(guān)、工業(yè)控制這些對(duì)算力和系統(tǒng)復(fù)雜度要求更高的場(chǎng)景。薪資上嵌入式Linux整體略高一些但也不是絕對(duì)的做得深的單片機(jī)工程師同樣吃香。4.2 什么信號(hào)說(shuō)明你該學(xué)嵌入式Linux以零基礎(chǔ)到就業(yè)為目標(biāo)我個(gè)人建議只要你不是年齡特別大精力特別有限優(yōu)先沖嵌入式Linux。原因很簡(jiǎn)單崗位更多、天花板更高而且現(xiàn)在AI落地到設(shè)備端跑輕量模型的板子基本都得上Linux系統(tǒng)。出現(xiàn)下面這幾個(gè)信號(hào)就別再糾結(jié)了你想做的設(shè)備需要跑網(wǎng)絡(luò)協(xié)議棧比如MQTT、TCP/IP通信設(shè)備需要掛攝像頭跑視覺(jué)識(shí)別哪怕只是簡(jiǎn)單的寵物檢測(cè)你需要同時(shí)管理多個(gè)任務(wù)而且任務(wù)之間有復(fù)雜的優(yōu)先級(jí)關(guān)系想接觸嵌入式AI、邊緣計(jì)算這些熱門方向。反過(guò)來(lái)如果你就喜歡純粹的底層寄存器操作喜歡限制條件下把代碼壓到極致那深耕裸機(jī)加RTOS也是一條好路。千萬(wàn)不要因?yàn)椤吧磉吶硕紝W(xué)Linux”就盲目跟風(fēng)先想清楚自己更喜歡哪類問(wèn)題。4.3 既然是零基礎(chǔ)Linux先掌握到這四板斧嵌入式Linux的學(xué)習(xí)曲線比單片機(jī)陡不少但拆開(kāi)看核心就四塊Linux系統(tǒng)基礎(chǔ)操作、C語(yǔ)言在Linux下的編譯調(diào)試、交叉編譯工具鏈、至少搞懂內(nèi)核和驅(qū)動(dòng)的基本交互流程。很多人一聽(tīng)“內(nèi)核源碼”就頭大其實(shí)入門階段根本不需要把內(nèi)核全部看完你只要能看懂一個(gè)最簡(jiǎn)單的字符設(shè)備驅(qū)動(dòng)框架知道用戶程序open/read/write的時(shí)候內(nèi)核里發(fā)生了什么就足夠支撐你寫(xiě)應(yīng)用層代碼了。環(huán)境上我強(qiáng)烈建議用Docker搭一個(gè)Ubuntu嵌入式環(huán)境網(wǎng)上搜“ubuntu docker嵌入式環(huán)境”有很多現(xiàn)成的鏡像和腳本把交叉編譯工具鏈裝好直接在容器里寫(xiě)代碼編譯燒錄到板子再運(yùn)行驗(yàn)證。這套流程能幫你省掉很多配置環(huán)境的坑而且以后換電腦、換工作環(huán)境一個(gè)腳本就能恢復(fù)效率極高。5. 第四階段嵌入式Linux應(yīng)用開(kāi)發(fā)與嵌入式AI實(shí)戰(zhàn)5.1 應(yīng)用層開(kāi)發(fā)的三條主線文件IO、多線程、網(wǎng)絡(luò)編程很多人一上來(lái)就撲向Linux驅(qū)動(dòng)開(kāi)發(fā)這是個(gè)誤區(qū)。對(duì)零基礎(chǔ)到就業(yè)的路線來(lái)說(shuō)先從應(yīng)用層切入更容易建立信心而且崗位數(shù)量上Linux應(yīng)用開(kāi)發(fā)的需求遠(yuǎn)大于驅(qū)動(dòng)開(kāi)發(fā)。嵌入式Linux應(yīng)用開(kāi)發(fā)的核心可以拆成三條主線第一條文件IO和系統(tǒng)編程。Linux哲學(xué)是“一切皆文件”GPIO是文件、串口是文件、傳感器驅(qū)動(dòng)節(jié)點(diǎn)也是文件。你用open、read、write、ioctl去操作這些設(shè)備節(jié)點(diǎn)和操作普通文件的接口是同一套。這條線建議用《Unix環(huán)境高級(jí)編程》APUE當(dāng)字典不用通讀按章節(jié)練習(xí)即可。第二條多線程編程。在嵌入式Linux上產(chǎn)品功能通常是由多個(gè)線程協(xié)作完成的一個(gè)線程采集傳感器數(shù)據(jù)、一個(gè)線程做算法處理、一個(gè)線程負(fù)責(zé)網(wǎng)絡(luò)上報(bào)。這里要重點(diǎn)掌握pthread庫(kù)的用法、互斥鎖和條件變量、線程間通信。寫(xiě)一個(gè)小的采集上報(bào)程序把這些串起來(lái)算是應(yīng)用開(kāi)發(fā)的基本功。第三條網(wǎng)絡(luò)編程。嵌入式設(shè)備幾乎沒(méi)有不上網(wǎng)的TCP/UDP、socket編程、HTTP/MQTT協(xié)議至少得熟一個(gè)??梢宰约簩?xiě)一個(gè)小項(xiàng)目用socket把開(kāi)發(fā)板上的溫度數(shù)據(jù)傳到PC端或者對(duì)接一個(gè)云平臺(tái)把數(shù)據(jù)推到云端。這一步做完你已經(jīng)能處理很多初級(jí)崗位的實(shí)際任務(wù)了。5.2 找一個(gè)有含金量的開(kāi)源項(xiàng)目拆開(kāi)揉碎再改造簡(jiǎn)歷上最值錢的東西不是“我學(xué)過(guò)什么課程”而是“我做過(guò)什么項(xiàng)目”。到了這個(gè)階段你需要一個(gè)有分量的項(xiàng)目來(lái)把前面學(xué)的所有知識(shí)串起來(lái)。項(xiàng)目從哪來(lái)兩條路一是GitHub上的嵌入式開(kāi)源項(xiàng)目二是結(jié)合熱門方向自己做一個(gè)小成品。GitHub上嵌入式領(lǐng)域的開(kāi)源項(xiàng)目非常多像嵌入式架構(gòu)設(shè)計(jì)、物聯(lián)網(wǎng)網(wǎng)關(guān)、設(shè)備端AI推理框架、AWTK這類嵌入式GUI庫(kù)都是很好的學(xué)習(xí)對(duì)象。我的建議是不要只看README要真正把它c(diǎn)lone下來(lái)編譯跑起來(lái)然后做三件事第一件事畫(huà)代碼結(jié)構(gòu)圖。搞清楚每個(gè)目錄干什么模塊之間的調(diào)用關(guān)系是什么樣主流程從上往下是通的還是沒(méi)有頭緒。第二件事剪裁。項(xiàng)目里跟當(dāng)前硬件無(wú)關(guān)的部分去掉或者換一個(gè)更小的平臺(tái)跑起來(lái)這個(gè)過(guò)程會(huì)讓你被迫深入理解模塊間的耦合關(guān)系。第三件事加功能。在原項(xiàng)目上加一個(gè)新的數(shù)據(jù)上報(bào)接口或者加一個(gè)新的傳感器驅(qū)動(dòng)加功能的過(guò)程會(huì)暴露你對(duì)原項(xiàng)目的理解深度。做完這三步你寫(xiě)簡(jiǎn)歷時(shí)對(duì)這個(gè)項(xiàng)目的描述就有了底氣。面試官一追問(wèn)細(xì)節(jié)你能很自然地講出“這里為什么用消息隊(duì)列”“那個(gè)地方為什么不直接全局變量”這才是項(xiàng)目經(jīng)驗(yàn)真正的價(jià)值。5.3 嵌入式AI不是玄學(xué)一臺(tái)板子就能入門2026年這個(gè)節(jié)點(diǎn)嵌入式AI已經(jīng)是不可忽略的方向。搜索熱詞里“寵物檢測(cè)AI模型——嵌入式設(shè)備上的貓狗實(shí)時(shí)識(shí)別”這種需求正是把AI模型從云端搬到設(shè)備端的典型場(chǎng)景。這不是什么高不可攀的黑科技其實(shí)就是兩件事訓(xùn)練或拿到一個(gè)輕量模型然后想辦法讓它在嵌入式設(shè)備上跑起來(lái)。從零基礎(chǔ)的角度我建議走這條落地方案先在本機(jī)用Python加一個(gè)推理框架拿一個(gè)訓(xùn)練好的貓狗識(shí)別模型對(duì)著圖片跑通然后找一個(gè)支持NPU或GPU加速的開(kāi)發(fā)板把模型轉(zhuǎn)成板子支持的格式最后寫(xiě)一個(gè)C或C的調(diào)用程序從攝像頭取幀、送進(jìn)模型推理、把識(shí)別結(jié)果疊加顯示出來(lái)。過(guò)程中你會(huì)接觸到模型量化、交叉編譯、設(shè)備端推理這些關(guān)鍵詞不用全學(xué)透能跑通一個(gè)demo面試時(shí)聊嵌入式AI就有話可說(shuō)了。如果你對(duì)Rust感興趣也可以關(guān)注一下Rust嵌入式開(kāi)發(fā)的方向這幾年Rust在嵌入式領(lǐng)域的熱度漲得很快內(nèi)存安全的特性在設(shè)備端尤其受重視。但零基礎(chǔ)我不建議一上來(lái)就Rust先把C和Linux的底子打好Rust可以作為加分項(xiàng)去擴(kuò)展順序不要搞反。6. 第五階段開(kāi)源項(xiàng)目、面試八股和筆試的沖刺準(zhǔn)備6.1 面試八股文躲不掉但要理解著背嵌入式面試題庫(kù)里常年飄著一批“八股文”比如C語(yǔ)言里static關(guān)鍵字的作用、volatile是干嘛的、中斷服務(wù)函數(shù)能不能調(diào)用printf、什么是大小端、SPI和I2C的區(qū)別、進(jìn)程和線程的區(qū)別、select和epoll的差異、Linux內(nèi)核態(tài)和用戶態(tài)的區(qū)別。你打開(kāi)“嵌入式八股文”相關(guān)的倉(cāng)庫(kù)里面幾千道題都有但千萬(wàn)別死記硬背。面試官問(wèn)八股本質(zhì)上不是要一個(gè)標(biāo)準(zhǔn)答案而是看你有沒(méi)有真正理解背后的機(jī)制。比如“volatile是干嘛的”你要是只背“防止編譯器優(yōu)化”他再問(wèn)一句“什么時(shí)候會(huì)用到”你答不上來(lái)就露餡了。正確的方法是每道題都追一個(gè)“為什么”把它和實(shí)際的嵌入式場(chǎng)景掛上鉤寄存器映射需要用volatile因?yàn)榧拇嫫髦禃?huì)被硬件修改中斷回調(diào)里不能調(diào)用耗時(shí)操作因?yàn)橹袛嗌舷挛挠袟4笮『驼{(diào)度限制。面試題量不用貪多核心的百來(lái)道題吃透比背三百道更有效。建議每個(gè)星期挑十道題用自己的話寫(xiě)一遍答案然后對(duì)著鏡子或者在紙上講出來(lái)。講得通順了面試時(shí)就不慌。6.2 筆試環(huán)節(jié)怎么突擊以嵌入式筆試題為例大廠的嵌入式崗位招聘流程里筆試往往比面試更殘酷。像宇視這類設(shè)備商歷年嵌入式筆試題網(wǎng)上基本都能找到匯總題型也比較固定C語(yǔ)言基礎(chǔ)選擇、指針和內(nèi)存的改錯(cuò)題、程序輸出題、簡(jiǎn)單算法題、嵌入式專業(yè)知識(shí)題中斷、寄存器、通信協(xié)議有的還會(huì)加一道綜合設(shè)計(jì)題。突擊筆試沒(méi)有捷徑核心就是刷題加復(fù)盤。刷題時(shí)給自己計(jì)時(shí)模擬真實(shí)筆試節(jié)奏。復(fù)盤時(shí)重點(diǎn)關(guān)注錯(cuò)題背后的知識(shí)點(diǎn)而不是只記答案。C語(yǔ)言要是能保證把指針、內(nèi)存、結(jié)構(gòu)體、鏈表的題做到百分之八十正確率筆試這關(guān)基本穩(wěn)了。另外嵌入式崗位的面試基本上都會(huì)讓你現(xiàn)場(chǎng)寫(xiě)代碼最常見(jiàn)的題包括手寫(xiě)字符串翻轉(zhuǎn)、判斷大小端、用位操作實(shí)現(xiàn)某種功能、實(shí)現(xiàn)一個(gè)環(huán)形緩沖區(qū)、單鏈表反轉(zhuǎn)。這些題看起來(lái)簡(jiǎn)單但白板編程和IDE里寫(xiě)完全兩個(gè)感受平時(shí)就要練習(xí)不用編譯器、純靠腦子推理代碼邏輯和邊界條件。6.3 簡(jiǎn)歷項(xiàng)目部分的地基內(nèi)核源碼和架構(gòu)設(shè)計(jì)項(xiàng)目怎么看到就業(yè)前你的簡(jiǎn)歷上至少要有兩個(gè)拿得出手的項(xiàng)目一個(gè)是基礎(chǔ)的單片機(jī)裸機(jī)項(xiàng)目一個(gè)是嵌入式Linux相關(guān)的綜合項(xiàng)目。項(xiàng)目描述別寫(xiě)“我完成了xxx功能”要寫(xiě)“我為了解決xxx問(wèn)題采用了xxx方案實(shí)現(xiàn)了xxx效果過(guò)程中踩過(guò)xxx坑”。這四段式描述比流水賬更有說(shuō)服力。有的同學(xué)覺(jué)得看“嵌入式內(nèi)核源碼”是資深工程師的事自己一個(gè)新人看不懂。其實(shí)入門階段你不需要全看重點(diǎn)是看一個(gè)具體的子系統(tǒng)或者一個(gè)驅(qū)動(dòng)框架比如platform總線、中斷子系統(tǒng)、字符設(shè)備驅(qū)動(dòng)。配合網(wǎng)上一些源碼分析博客把一個(gè)點(diǎn)看通了寫(xiě)進(jìn)簡(jiǎn)歷能瞬間增加技術(shù)深度。GitHub上很多“嵌入式架構(gòu)設(shè)計(jì)”類的項(xiàng)目也值得拿來(lái)當(dāng)項(xiàng)目經(jīng)驗(yàn)。但記住直接說(shuō)“我參與了某開(kāi)源項(xiàng)目”是不太穩(wěn)的因?yàn)槊嬖嚬倏赡軙?huì)順著往下問(wèn)細(xì)節(jié)你沒(méi)做過(guò)勢(shì)必露餡。更聰明的做法是選一個(gè)小型開(kāi)源項(xiàng)目自己維護(hù)一個(gè)fork把代碼結(jié)構(gòu)吃透修掉一兩個(gè)bug增加一兩個(gè)小功能然后作為“我對(duì)這個(gè)項(xiàng)目的理解”去聊。這樣面試官看到的是你的分析能力和動(dòng)手能力而不是復(fù)讀能力。最后再分享一點(diǎn)個(gè)人體會(huì)。嵌入式這條路從零基礎(chǔ)到找到工作快的人五到八個(gè)月正常節(jié)奏十到十二個(gè)月慢一點(diǎn)的也不要灰心方向比速度重要。我有段時(shí)間特別焦慮覺(jué)得學(xué)得好慢、別人怎么那么快后來(lái)發(fā)現(xiàn)快的人往往也是在某一兩個(gè)方向上鉆得特別深而不是什么都碰了一點(diǎn)?,F(xiàn)在網(wǎng)上關(guān)于嵌入式的免費(fèi)資料和學(xué)習(xí)路線已經(jīng)非常豐富了完全不需要花3萬(wàn)塊去買一個(gè)“別人替你規(guī)劃的路徑”。你缺的不是資源也不是天賦是一個(gè)能沉下心寫(xiě)代碼、調(diào)板子、看報(bào)錯(cuò)、翻手冊(cè)的夜晚。把上面的路線拆成一個(gè)個(gè)小目標(biāo)每天前進(jìn)一點(diǎn)點(diǎn)offer這東西真的就是個(gè)時(shí)間問(wèn)題。