www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式微處理器
[導(dǎo)讀]本文選自公眾號(hào)“科巖成果”經(jīng)常有人問(wèn)我,嵌入式該怎么入門(mén),怎么學(xué)習(xí),怎么精通,怎么成為專(zhuān)家。我前思后想掏心掏肺,花了大概2周的時(shí)間,寫(xiě)了這樣的一個(gè)成長(zhǎng)路徑。注意!本文又干又長(zhǎng),如果此時(shí)你無(wú)法抽出大約10分鐘時(shí)間,建議看個(gè)開(kāi)頭,然后點(diǎn)個(gè)關(guān)注、收藏之后再(也不)看。首先如圖,嵌入式學(xué)...

本文選自公眾號(hào)“科巖成果”
經(jīng)常有人問(wèn)我,嵌入式該怎么入門(mén),怎么學(xué)習(xí),怎么精通,怎么成為專(zhuān)家。我前思后想掏心掏肺,花了大概2周的時(shí)間,寫(xiě)了這樣的一個(gè)成長(zhǎng)路徑。

注意!本文又干又長(zhǎng),如果此時(shí)你無(wú)法抽出大約10分鐘時(shí)間,建議看個(gè)開(kāi)頭,然后點(diǎn)個(gè)關(guān)注、收藏之后再(也不)看。

首先如圖,嵌入式學(xué)習(xí)路徑之單片機(jī)。

為什么單說(shuō)單片機(jī)呢,因?yàn)槲矣X(jué)得嵌入式是一個(gè)比較籠統(tǒng)的概念,可以按處理器性能大致分成兩類(lèi)。

性能低的比如51、stm32、arduino,這類(lèi)設(shè)備一般用作開(kāi)發(fā)比較便宜的產(chǎn)品,比如手環(huán)、插座、牙刷、小型玩具什么的,這樣的芯片資源有限,沒(méi)辦法運(yùn)行l(wèi)inux操作系統(tǒng);

還有一類(lèi)是高性能的,像我們手機(jī)那種處理器,能運(yùn)行l(wèi)inux、安卓操作系統(tǒng)的,這類(lèi)芯片一般用作開(kāi)發(fā)比較貴的產(chǎn)品,像智能音箱、自動(dòng)售貨機(jī)、攝像頭、路由器等等。

這兩種性能不同的處理器都是嵌入式,但需要掌握的技術(shù)是有一定區(qū)別的,這期就先講低性能的,單片機(jī)的成長(zhǎng)路徑,如果看完覺(jué)得不錯(cuò)記得關(guān)注,后面會(huì)再寫(xiě)一篇嵌入式Linux的成長(zhǎng)路徑。

依然是熟悉的4個(gè)階段,這是科巖獨(dú)創(chuàng)學(xué)習(xí)4階段,小菜雞、入門(mén)雞、進(jìn)階機(jī)、老司機(jī),也就是從入門(mén)到精通(入土)的幾個(gè)階段。

看完歡迎留言告訴我你在什么階段。

小菜雞

先從小菜雞開(kāi)始,小菜雞就是一個(gè)純小白,就是你茫然無(wú)知什么都不懂。需要學(xué)習(xí)的有三個(gè)部分,基礎(chǔ)概念、C語(yǔ)言基礎(chǔ)、單片機(jī)基礎(chǔ)。

如圖,基礎(chǔ)概念內(nèi)容如下:

你要知道單片機(jī)是什么;要知道MCU、RAM、ROM、IO引腳、中斷、定時(shí)器這些概念指什么;另外,常見(jiàn)單片機(jī)有8位、16位和32位的。

還要對(duì)電路板有概念,什么是原理圖,什么是PCB,這些硬件概念在小菜雞階段知道就行。

再然后是軟件,其實(shí)也就是運(yùn)行在單片機(jī)中的程序,我們也把它叫做固件。

有了硬件和軟件,就要把軟件安裝到硬件中執(zhí)行,這個(gè)過(guò)程叫做編譯、下載、運(yùn)行,一般會(huì)用到Keil、IAR、gcc等等工具。

我們?nèi)松袩浀絾纹瑱C(jī)的第一個(gè)程序一般是什么呢?

就是點(diǎn)燈,點(diǎn)燈其實(shí)就是嵌入式工程師的hello world,一般電路板上都有l(wèi)ed燈,LED燈點(diǎn)亮了,就說(shuō)明這塊板子的硬件,包括電源、處理器、引腳等等是沒(méi)有問(wèn)題的,還說(shuō)明軟件的燒錄、運(yùn)行等一系列的步驟是沒(méi)有問(wèn)題的。

板子是好的,才有后面的工作。

所以作為嵌入式工程師,一般也自稱(chēng)為點(diǎn)燈工程師,>> 大家好我是點(diǎn)燈工程師,科巖 >_<

最后一點(diǎn),就是知道什么是嵌入式工程師,一般行業(yè)內(nèi)稱(chēng)呼一名嵌入式工程師都是某某工。

比如你姓張,大家就會(huì)稱(chēng)你為張公,姓李呢,就會(huì)叫你李公,像我呢,我姓老,不知道此刻看文章的你姓什么嘞?

工程師上班一般都在做什么呢?就是在畫(huà)板子,寫(xiě)程序,調(diào)板子,燒板子。

你燒過(guò)板子么,反正我是燒過(guò),特別好玩,直接冒煙,把我們上班的大樓都給整停電了,是不是很有趣。

嵌入式工程師的標(biāo)準(zhǔn)穿搭:黑框眼鏡,格子衫,黑色或者灰色的雙肩包。非常典型,工作經(jīng)驗(yàn)一般可以通過(guò)發(fā)際線的高低做判斷。

對(duì)單片機(jī)程序有概念之后,就要學(xué)習(xí)C語(yǔ)言了。

這里寫(xiě)了三點(diǎn),參考c語(yǔ)言路徑圖;達(dá)到小菜雞水平就可以上手單片機(jī);最好是能達(dá)到進(jìn)階機(jī)。

這是什么意思呢,之前我做過(guò)一個(gè)C語(yǔ)言的學(xué)習(xí)路徑圖,也是分成了4個(gè)階段。

小菜雞是基礎(chǔ)就是學(xué)C語(yǔ)言的語(yǔ)法;入門(mén)雞算是培養(yǎng)興趣可學(xué)可不學(xué);進(jìn)階機(jī)比較高級(jí),數(shù)據(jù)結(jié)構(gòu)、算法、網(wǎng)絡(luò)、linux都該學(xué)了,最好能到這個(gè)水平;老司機(jī)就不強(qiáng)求了,可以后面再學(xué)。

具體如下:

這部分可以看看日本作家寫(xiě)的幾本計(jì)算機(jī)知識(shí)相關(guān)的科普書(shū),《計(jì)算機(jī)是怎樣跑起來(lái)的》、《程序是怎樣跑起來(lái)的》,這兩本書(shū)對(duì)新手都非常友好。


看書(shū)有一個(gè)原則,就是千萬(wàn)不要把”讀完“當(dāng)做目的,計(jì)算機(jī)相關(guān)的圖書(shū)很多都是大部頭,等到你讀完,黃花菜都涼了。所以最好是帶著問(wèn)題讀,把它們當(dāng)做一部字典,只讀你關(guān)心的部分,找到答案就可以把書(shū)放下了,不要糾結(jié)讀沒(méi)讀完。

對(duì)計(jì)算機(jī)和編程有了基本的概念后,就要學(xué)習(xí)C語(yǔ)言的語(yǔ)法了。C語(yǔ)言的語(yǔ)法其實(shí)非常簡(jiǎn)單,里面所涉及的概念也不多,都是一門(mén)編程語(yǔ)言中最基礎(chǔ)的東西。

數(shù)據(jù)類(lèi)型、常量、變量、表達(dá)式、函數(shù)、分支、循環(huán)、數(shù)組、結(jié)構(gòu)體、指針、C庫(kù),一共就這11個(gè)概念,對(duì)新手來(lái)說(shuō),前面的簡(jiǎn)單點(diǎn),后面的可能稍微難理解點(diǎn),平均每個(gè)概念學(xué)習(xí)3到4小時(shí)左右就可以了。

這些基本概念該怎么學(xué)習(xí)呢?

下面說(shuō)第二個(gè)學(xué)習(xí)原則:一定要有合適的練習(xí)題。

什么是合適的練習(xí)題,合適的練習(xí)題有3個(gè)特點(diǎn)。

一是有明確的訓(xùn)練目的。比如說(shuō)學(xué)習(xí)函數(shù),那合適的練習(xí)題就會(huì)把練習(xí)重點(diǎn)放在函數(shù)的各個(gè)特征上,而不應(yīng)該有其他的一些知識(shí)盲點(diǎn)。

二是不應(yīng)該需要花費(fèi)太長(zhǎng)時(shí)間。這個(gè)花費(fèi)的時(shí)間應(yīng)該剛剛好能夠使你保持專(zhuān)注,一旦失去專(zhuān)注力,浪費(fèi)時(shí)間不說(shuō),還可能完不成練習(xí)。

三是合適的練習(xí)題的難度應(yīng)該是能夠稍稍高出你自身的水平。使你每次練習(xí)都有一點(diǎn)新的收獲,如果每次練習(xí)都在畫(huà)菱形、畫(huà)正方形,畫(huà)了也白畫(huà)。

有了合適的練習(xí)題的訓(xùn)練,你就會(huì)比較快的掌握基礎(chǔ)知識(shí)了。

我建議這個(gè)階段快速突擊,小菜雞的階段不宜久留,宜速戰(zhàn)速?zèng)Q,1周時(shí)間搞定,最多2周。否則啊,學(xué)習(xí)很容易變得枯燥乏味,就會(huì)產(chǎn)生這玩意到底有沒(méi)有用啊,這種負(fù)面情緒。

還是拿登山做舉例,小菜雞階段就是在山腳下聽(tīng)老師講理論課,老師講了半天,登山鞋有哪些品牌,如何選擇,登山杖該怎么使用,登山時(shí)姿勢(shì)是什么樣,全身肌肉如何發(fā)力,遇到雨雪天氣怎么保暖,遇到山體滑坡怎么自救等等,一直講這些理論。

你說(shuō)我報(bào)名了登山運(yùn)動(dòng)練習(xí)班,光理論講了半年,學(xué)員當(dāng)然要問(wèn),會(huì)選登山鞋到底和會(huì)不會(huì)登山有什么關(guān)系?

學(xué)登山么,懂了最基礎(chǔ)的理論知識(shí),就趕緊是騾子是馬拉出去溜溜了!先登個(gè)幾百、一千米看看,把登山實(shí)踐過(guò)程中遇到的問(wèn)題點(diǎn)記錄下來(lái),再翻書(shū)本找教練學(xué)習(xí)理論。

學(xué)習(xí)編程語(yǔ)言也是一樣,懂了最基礎(chǔ)的之后,就可以做些與實(shí)際生活相關(guān)的小項(xiàng)目,遇到不會(huì)的再回頭學(xué)就可以。

這里我插入第三個(gè)學(xué)習(xí)原則,叫做「最少必要知識(shí)」。

就是說(shuō)剛接觸一個(gè)領(lǐng)域,一門(mén)知識(shí),先把最關(guān)鍵的那些知識(shí)學(xué)會(huì),你就可以做些簡(jiǎn)單的東西出來(lái)了,這時(shí)就應(yīng)該盡快開(kāi)始實(shí)踐,特別是那種需要?jiǎng)邮值膶W(xué)科,沒(méi)有必要糾結(jié)要全學(xué)完再開(kāi)始,而且有些高級(jí)的東西必須需要時(shí)間的積累才能理解,就算你學(xué)會(huì)了考試考過(guò)了,沒(méi)有時(shí)間打磨,那也是紙上談兵啊。

所以我再?gòu)?qiáng)調(diào)一遍,小菜雞階段不宜久留,應(yīng)當(dāng)速戰(zhàn)速?zèng)Q,1周時(shí)間搞定,最多2周。

得馬上做點(diǎn)有成就感,有滿(mǎn)足感的東西出來(lái)。

所以,趕緊進(jìn)入第二個(gè)階段,入門(mén)雞。

這第二個(gè)階段的目的是在對(duì)編程有了一點(diǎn)初步認(rèn)識(shí)之后,嘗試自我開(kāi)發(fā)自己對(duì)編程的興趣。

我建議用windows系統(tǒng)的接口做一些比較有趣、好玩的程序,比如我簡(jiǎn)單列了幾個(gè)適合練手的小程序。

我為什么推薦windows呢?一是因?yàn)閣indows的圖像界面編程是非常方便的,拖拖拽拽就能畫(huà)個(gè)界面出來(lái),所見(jiàn)即所得很容易形成成就感;二是因?yàn)閣indows特別適合小白,它把程序背后編譯、鏈接等等在新手階段不需要了解的知識(shí)全部隱藏掉了,只要關(guān)注你的代碼就好。

可以從最簡(jiǎn)單的開(kāi)始,比如說(shuō)先彈出一個(gè)這樣的對(duì)話(huà)框,其實(shí)也沒(méi)有寫(xiě)幾行代碼。

但是這個(gè)東西就很有趣,就要比那種黑乎乎的命令行看著順眼的多對(duì)吧,你可以把這個(gè)程序發(fā)給你的同學(xué),如果你同學(xué)只會(huì)寫(xiě)楊輝三角,那你這簡(jiǎn)直就是高了一個(gè)段位。這是什么?這不就是成就感嗎?

我上學(xué)那會(huì)就對(duì)圖形界面很感興趣,我到現(xiàn)在依然記得第一次用windows編寫(xiě)了一個(gè)最簡(jiǎn)單的對(duì)話(huà)框的那種喜悅,我感覺(jué)我就是計(jì)算機(jī)的上帝,我讓他干嘛他就干嘛,這才叫編程嘛。

我用C語(yǔ)言寫(xiě)過(guò)一個(gè)音樂(lè)播放器,還用java寫(xiě)過(guò)一個(gè)撲克牌游戲,當(dāng)時(shí)真的是,課程設(shè)計(jì)都直接高分。

圖形界面編程很容易激發(fā)一個(gè)人的興趣,俗話(huà)說(shuō),興趣是最好的老師,一旦你學(xué)習(xí)編程的興趣和熱情被點(diǎn)燃,那這興趣會(huì)驅(qū)動(dòng)著你繼續(xù)學(xué)習(xí)下去,你會(huì)不斷完善你所編寫(xiě)的代碼,直到它展現(xiàn)出你想要的樣子。

在這些編程練習(xí)中,你會(huì)反復(fù)用到第一個(gè)階段學(xué)到的理論知識(shí),遇到不會(huì)的,翻翻書(shū),找找視頻馬上補(bǔ)上,這樣的練習(xí)有了理論指導(dǎo)會(huì)事半功倍。

這個(gè)階段的時(shí)間長(zhǎng)短呢,自己決定,如果越做越爽,也可以一直在這個(gè)階段玩下去。

這里我再插入第四個(gè)學(xué)習(xí)原則,就是要自己給自己訂立目標(biāo)。不能漫無(wú)目的的瞎學(xué),要有個(gè)指引,訂立的目標(biāo)最好是可以衡量的,不然你都不知道自己學(xué)沒(méi)學(xué)會(huì)。

比如立下目標(biāo),要在3小時(shí)內(nèi)學(xué)習(xí)5個(gè)C標(biāo)準(zhǔn)庫(kù)的接口。能夠知道在什么情況下用、并且會(huì)用5個(gè)接口就算達(dá)成了目標(biāo)。

再比如做個(gè)音樂(lè)播放器,要把一個(gè)音樂(lè)播放器做到什么樣的效果,有哪些功能,先從整體上考慮好,然后為了實(shí)現(xiàn)這些目標(biāo)不斷完善,一旦達(dá)到了目標(biāo),就可以進(jìn)入下一個(gè)目標(biāo)了。

那么下是第三個(gè)階段,進(jìn)階機(jī)。

這個(gè)階段要學(xué)一些編程語(yǔ)言之外的東西。數(shù)據(jù)結(jié)構(gòu)、算法、網(wǎng)絡(luò)的理論和實(shí)踐都該安排上了。

數(shù)據(jù)結(jié)構(gòu)可以先學(xué)些最基礎(chǔ)的,像棧啊、隊(duì)列啊、鏈表,他們的概念是什么,有什么區(qū)別和聯(lián)系,樹(shù)形結(jié)構(gòu)比較難理解,看不懂可以先略過(guò)。

簡(jiǎn)單的算法也要懂一些,排序和查找是最常用的,必須要掌握。

計(jì)算機(jī)網(wǎng)絡(luò)是整個(gè)互聯(lián)網(wǎng)行業(yè)網(wǎng)絡(luò)通信的理論基礎(chǔ),也必須學(xué),物理層、鏈路層可以不會(huì),網(wǎng)絡(luò)層、傳輸層和應(yīng)用層必須掌握最關(guān)鍵的幾個(gè)協(xié)議。

最后,學(xué)習(xí)了這些理論知識(shí)還是要實(shí)踐,沒(méi)有實(shí)踐的理論就像是蓋在沙子上的碉堡,俗稱(chēng)沙雕。如果你不想做沙雕,那就把代碼寫(xiě)起來(lái)!

這個(gè)階段該學(xué)習(xí)在linux上寫(xiě)代碼了,畢竟在實(shí)際的工作中,基本沒(méi)有人在windows上用C語(yǔ)言開(kāi)發(fā)程序。

我覺(jué)得非常合適的一個(gè)練習(xí)項(xiàng)目就是網(wǎng)絡(luò)聊天軟件,像QQ一樣的,可以用linux寫(xiě)服務(wù)端,用windows寫(xiě)客戶(hù)端,這個(gè)過(guò)程中的練習(xí)會(huì)加深對(duì)操作系統(tǒng)的系統(tǒng)調(diào)用、數(shù)據(jù)結(jié)構(gòu)、網(wǎng)絡(luò)這些知識(shí)的理解。

而且網(wǎng)絡(luò)聊天軟件很有趣,做起來(lái)也沒(méi)那么枯燥,做好了之后發(fā)給你女神一個(gè)專(zhuān)屬客戶(hù)端,你們?cè)谀阕约簩?xiě)的軟件里聊天,邊聊天邊吹牛,豈不美哉!

這個(gè)階段涉及不同課程的知識(shí),應(yīng)該花費(fèi)比較長(zhǎng)的時(shí)間。我建議代碼要一行一行的寫(xiě),就像飯要一口一口的吃,三連支持要邊看邊點(diǎn)。

項(xiàng)目中每一行代碼都要搞明白什么意思,這樣你才能寫(xiě)出健壯的、沒(méi)有bug的代碼。

我在寫(xiě)這個(gè)稿子的時(shí)候?qū)iT(mén)去找了一些開(kāi)源的聊天軟件,沒(méi)有找到我想要的C語(yǔ)言的windows linux這樣組合的,并且適合新手的項(xiàng)目。

那么接下來(lái)呢,就來(lái)到了C語(yǔ)言學(xué)習(xí)的最后一個(gè)階段:老司機(jī)階段。

這個(gè)階段不再需要學(xué)習(xí)基礎(chǔ)知識(shí),而是要開(kāi)始向高手、向大師學(xué)習(xí)了。

使用廣泛、經(jīng)得起時(shí)間考驗(yàn)的開(kāi)源代碼是這個(gè)階段最好的學(xué)習(xí)資料,我列出了幾個(gè)網(wǎng)絡(luò)行業(yè)相關(guān)的C語(yǔ)言的開(kāi)源項(xiàng)目,這也是我在工作中經(jīng)常接觸到的項(xiàng)目。

有JSON格式數(shù)據(jù)的解析庫(kù)cjson、最小的http服務(wù)器tinyhttpd、高性能的http服務(wù)器nginx,還有物聯(lián)網(wǎng)常用的傳輸協(xié)議mqtt,如果想學(xué)習(xí)tcp與udp的實(shí)現(xiàn),有個(gè)協(xié)議棧找叫l(wèi)wip,與linux內(nèi)核的網(wǎng)絡(luò)協(xié)議棧相比,代碼量少了不是一星半點(diǎn),非常適合學(xué)習(xí)。

我不知道你是什么行業(yè),你所在的行業(yè)又有哪些著名的開(kāi)源C項(xiàng)目,歡迎留言分享給大家!我相信它們都可以拿來(lái)做自學(xué)的材料。

剛開(kāi)始學(xué)習(xí)開(kāi)源代碼肯定是一臉懵B的,你會(huì)驚呼,C語(yǔ)言還能這樣寫(xiě)?你會(huì)懷疑,我眼前的代碼還是那個(gè)熟悉的C語(yǔ)言么。

相信我,每個(gè)人都是這樣的,我總結(jié)了幾個(gè)學(xué)習(xí)源碼的方法也分享給大家,這個(gè)腦圖后面也有:

首先要保證代碼是沒(méi)有錯(cuò)誤可以直接運(yùn)行的,不然一運(yùn)行就出錯(cuò),就沒(méi)有辦法繼續(xù)下去;

接著我們要先從整體上理解整個(gè)項(xiàng)目的功能是什么,它的輸入是什么,輸出是什么,先在頭腦里有個(gè)預(yù)期;

在看代碼的時(shí)候可以只關(guān)注數(shù)據(jù)結(jié)構(gòu)中最關(guān)鍵的字段和最關(guān)鍵的語(yǔ)句,與主干邏輯無(wú)關(guān)的代碼可以直接忽視掉。**

進(jìn)階機(jī)階段是學(xué)習(xí)的是怎么使用接口,老司機(jī)階段就是學(xué)習(xí)怎么實(shí)現(xiàn)接口了。能看明白開(kāi)源代碼,能講明白實(shí)現(xiàn)原理,你就踏入了專(zhuān)家之路。

有了C語(yǔ)言基礎(chǔ),接下來(lái)就是一些單片機(jī)的基礎(chǔ)了。

首先要選一款學(xué)習(xí)資料豐富的mcu,建議直接選STM32,資料非常豐富,如果有任何問(wèn)題查資料基本都能找到答案,對(duì)初學(xué)者來(lái)說(shuō)非常友好

接著就要寫(xiě)代碼了,我們的程序一般是通過(guò)輪詢(xún),或者定時(shí)器,或者中斷這三種方式來(lái)進(jìn)行觸發(fā),要學(xué)會(huì)編寫(xiě)這三種方式的代碼。

接下來(lái)是外設(shè),單片機(jī)存在的意義是什么呢?

其實(shí)就是通過(guò)外設(shè),可能是鍵盤(pán)也可能是傳感器,這種輸入類(lèi)型的外設(shè),輸入一定的數(shù)據(jù),進(jìn)行處理再通過(guò)輸出類(lèi)型的外設(shè),可能是顯示屏,輸出一定的結(jié)果。

在小菜雞階段要學(xué)習(xí)使用各種常見(jiàn)的外設(shè),LED燈、蜂鳴器、鍵盤(pán)還有IO引腳,這都是最基礎(chǔ)的。

還要學(xué)習(xí)這3種很常見(jiàn)的串行口,uart、spi、i2c,要掌握通信協(xié)議的設(shè)計(jì)和編解碼的處理,很多傳感器就是通過(guò)固定的協(xié)議與單片機(jī)通信,另外單片機(jī)再和其他單片機(jī)、PC機(jī)等設(shè)備通信時(shí)都會(huì)用到協(xié)議編解碼。

接著要學(xué)習(xí)一些調(diào)試手段,比如說(shuō)Keil和IAR軟件的調(diào)試功能。都挺簡(jiǎn)單的,如果程序有問(wèn)題,可以用調(diào)試手段來(lái)查查內(nèi)存、某個(gè)變量的值,排查問(wèn)題。

小菜雞最后,要做幾個(gè)簡(jiǎn)單的實(shí)踐。

我列出來(lái)兩個(gè),一個(gè)是測(cè)距,可以用紅外或者是超聲傳感器來(lái)做。

另外一個(gè)實(shí)踐是,可以讀一些傳感器的數(shù)據(jù),比如溫濕度、人體檢測(cè),把數(shù)據(jù)顯示在屏幕上。

小菜雞階段結(jié)束后,你就可以做些簡(jiǎn)單的小項(xiàng)目。菜雞學(xué)習(xí)時(shí)間呢,大概兩周左右就可以了。

入門(mén)雞

接下來(lái)就來(lái)到了入門(mén)雞階段,有這么幾個(gè)部分:?jiǎn)纹瑱C(jī)高級(jí)部分,學(xué)習(xí)電路板知識(shí),再做幾個(gè)復(fù)雜點(diǎn)的實(shí)踐小項(xiàng)目。

先看單片機(jī)的高級(jí),包括這些內(nèi)容:

寫(xiě)代碼要有一定的規(guī)范,包括縮進(jìn)、注釋、變量和函數(shù)的命名等等,要按規(guī)矩寫(xiě)。

入門(mén)雞階段,項(xiàng)目中要用一些基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)了,不要全局變量和flag滿(mǎn)天飛;還要學(xué)些基礎(chǔ)的算法,主要的就是排序和查找。

接著要會(huì)用狀態(tài)機(jī)編寫(xiě)稍復(fù)雜的程序,小菜雞學(xué)會(huì)的輪詢(xún)、定時(shí)器、中斷只能做些簡(jiǎn)單的程序,復(fù)雜點(diǎn)程序就要有結(jié)構(gòu)進(jìn)行控制了,狀態(tài)機(jī)是比較好的一種代碼框架,要理解狀態(tài)機(jī)的原理、編寫(xiě)的手法。

再?gòu)?fù)雜點(diǎn)的程序,就得上操作系統(tǒng)了,學(xué)會(huì)使用嵌入式實(shí)時(shí)操作系統(tǒng),也就是RTOS,要了解它們的任務(wù)、鎖、信號(hào)量和消息隊(duì)列是怎么使用的。

如果做和物聯(lián)網(wǎng)相關(guān)的項(xiàng)目,就要編寫(xiě)網(wǎng)絡(luò)相關(guān)的程序,得會(huì)寫(xiě)socket程序,調(diào)用socket接口收發(fā)tcp/udp/mqtt的數(shù)據(jù)。

單片機(jī)聯(lián)網(wǎng)一般會(huì)用到無(wú)線模塊,可以通過(guò)串口透?jìng)骰蛘逜T指令控制模塊,比如Wifi、藍(lán)牙、ZigBee等等傳輸數(shù)據(jù)。

很多項(xiàng)目中的單片機(jī)是需要用電池的,電池容量有限,所以要學(xué)會(huì)編寫(xiě)低功耗的程序,比如控制單片機(jī)睡眠、停機(jī)、待機(jī),還有低功耗如何測(cè)試、有哪些指標(biāo)衡量功耗的高低,都要掌握。

第二部分,要學(xué)習(xí)看電路板了。

得能看懂簡(jiǎn)單的原理圖和PCB就行。

最后,入門(mén)雞的實(shí)踐:

我建議做一個(gè)物聯(lián)網(wǎng)設(shè)備,連接某個(gè)云平臺(tái)。

阿里云、騰訊云、百度云,都可以連,他們都有物聯(lián)網(wǎng)的接入平臺(tái),接入后,設(shè)備要與平臺(tái) APP打通。

比如做一個(gè)聯(lián)網(wǎng)的溫濕度采集器,可以在APP上看到設(shè)備從傳感器讀取數(shù)據(jù),也可以做一個(gè)聯(lián)網(wǎng)的智能插座或者智能燈,通過(guò)APP來(lái)控制它的開(kāi)關(guān)。

入門(mén)雞要花一定的時(shí)間,可能是你工作個(gè)一年后到三年之間的這樣的一個(gè)狀態(tài),會(huì)靈活的使用以上的這些軟件接口與硬件器件,時(shí)間久了就可以編寫(xiě)復(fù)雜的程序,做復(fù)雜的項(xiàng)目了。

進(jìn)階機(jī)

接下來(lái)是進(jìn)階機(jī)階段,這個(gè)階段要學(xué)習(xí)的東西不但變多了,還更深入了。

我把進(jìn)階機(jī)的學(xué)習(xí)范圍分成2大部分,一部分叫“通用內(nèi)功”,就是幾乎哪個(gè)行業(yè)都通用的東西,學(xué)會(huì)內(nèi)功,才能以不變應(yīng)萬(wàn)變;另一部分叫“獨(dú)門(mén)絕技”,指的是某一個(gè)細(xì)分領(lǐng)域的專(zhuān)業(yè)技術(shù)知識(shí),學(xué)會(huì)了至少不用擔(dān)心失業(yè)。

咱們先看通用內(nèi)功,首先是最上層,嵌入式實(shí)時(shí)操作系統(tǒng)源碼的學(xué)習(xí),我建議學(xué)習(xí)FreeRTOS、RT-Thread、μC/OS這三個(gè)比較常用的嵌入式系統(tǒng)。

入門(mén)雞階段是會(huì)用RTOS,進(jìn)階機(jī)就要學(xué)習(xí)任務(wù)、鎖、信號(hào)量怎么實(shí)現(xiàn)了。

接下來(lái)是網(wǎng)絡(luò)源代碼的學(xué)習(xí),同樣的,在入門(mén)雞階段是會(huì)用網(wǎng)絡(luò)接口,進(jìn)階機(jī)就要學(xué)習(xí)如何實(shí)現(xiàn)了。

我們可以通過(guò)lwip這樣的輕型協(xié)議棧源碼來(lái)學(xué)習(xí)TCP或者UDP,mqtt是物聯(lián)網(wǎng)傳輸?shù)膮f(xié)議,HTTP是WEB的常用協(xié)議,圖中這幾個(gè)源碼都是可以直接學(xué)習(xí)的。

然后是模塊的二次開(kāi)發(fā),模塊二次開(kāi)發(fā)指的是基于無(wú)線模塊直接做編碼,而不是通過(guò)MCU進(jìn)行控制。

這樣可以減少一顆MCU主控芯片的使用,節(jié)約硬件成本,畢竟咱們硬件行業(yè)成本第一?。?/p>接著可以學(xué)習(xí)對(duì)代碼性能進(jìn)行優(yōu)化,我列出了4種方式,這些都可以了解,有的項(xiàng)目有特殊的需求,咱們就要知道怎么優(yōu)化。

下面是代碼的可移植性,其實(shí)也是按照一定的規(guī)范編寫(xiě)代碼,我也是列出了4點(diǎn)。

如果寫(xiě)代碼時(shí)習(xí)慣考慮代碼的可移植性,那你寫(xiě)的代碼也能很容易的移植到不同平臺(tái)。有時(shí)我們做一款產(chǎn)品,產(chǎn)品升級(jí)了或者更換了硬件芯片,之前代碼移植性好的話(huà),可以很快替換成新平臺(tái)。

然后是編譯和鏈接的腳本,要學(xué)習(xí)C語(yǔ)言代碼是如何編譯成機(jī)器指令,機(jī)器指令又是如何在芯片中進(jìn)行組織的。

代碼編譯完會(huì)進(jìn)行鏈接,要指定加載地址、指定代碼段、數(shù)據(jù)段地址,這個(gè)也是有些特殊的產(chǎn)品需要人工設(shè)置。

除了C語(yǔ)言,還要掌握幾種其他編程語(yǔ)言,Python、lua、shell都建議學(xué)學(xué)。

學(xué)會(huì)了C語(yǔ)言,這些語(yǔ)言其實(shí)都不怎么用學(xué),看看語(yǔ)法就能上手寫(xiě),我們經(jīng)常用這類(lèi)語(yǔ)言處理有規(guī)律的文本、處理二進(jìn)制固件,方便快捷。

后面三個(gè)是學(xué)習(xí)底層知識(shí),首先要學(xué)會(huì)看芯片手冊(cè),通過(guò)芯片手冊(cè)能學(xué)到太多東西了。

在工作的過(guò)程中會(huì)遇到各種各樣的芯片,可能會(huì)有一些比較少見(jiàn)的特殊芯片,沒(méi)有封裝成C語(yǔ)言的庫(kù),或者某些不常用的功能芯片提供的庫(kù)沒(méi)有封裝,這時(shí)你就要通過(guò)操作寄存器直接控制它們。

芯片手冊(cè)第一次看肯定看不懂,這個(gè)也需要花時(shí)間,時(shí)間久了,看得多了自然就懂了。

而且每個(gè)芯片的芯片手冊(cè)套路、結(jié)構(gòu)都差不多,看懂一個(gè),基本其他也都懂了,所以大家不用擔(dān)心。

再往下一層就是匯編指令集,單片機(jī)arm的體系結(jié)構(gòu)居多,應(yīng)當(dāng)學(xué)一下arm的指令集,比如說(shuō)Cortex M系列的核,它有37個(gè)寄存器,要了解它的一些常見(jiàn)匯編指令。能看懂,能夠編寫(xiě)簡(jiǎn)單的程序就可以了。

最后再下一層就是電子學(xué)了,要學(xué)模電和數(shù)電的知識(shí),電壓電流,電阻電容,半導(dǎo)體二極管等等,都要知道它們是干嘛的,接著門(mén)電路、CPU、存儲(chǔ)器的電路是怎么設(shè)計(jì)的,知道理論就可以了。

上面這些知識(shí)都是內(nèi)功心法,無(wú)論做哪個(gè)行業(yè),只要和硬件打交道,都能用得上,是咱吃飯的家把什。

下面再看看獨(dú)門(mén)絕技都有啥,獨(dú)門(mén)絕技就是能讓咱們吃的爽,吃的久。

首先是通信協(xié)議棧的開(kāi)發(fā),比如PHY層、MAC層、空口各層協(xié)議的開(kāi)發(fā),像Wifi、4G、5G都有類(lèi)似的開(kāi)發(fā)需求、崗位,現(xiàn)在5G這么火,如果你能參與開(kāi)發(fā)一個(gè)5G模組,那就非常厲害了!

下面是算法,算法這個(gè)分支也是一個(gè)比較專(zhuān)業(yè)性的分支,我列出了一些咱們單片機(jī)上可以跑的算法,濾波、姿態(tài),慣導(dǎo),PID,還有slam算法,有些是做可穿戴設(shè)備需要的,有些是無(wú)人機(jī)、無(wú)人車(chē)需要。

做算法是有很高門(mén)檻的,基本都研究生起步,如果你沒(méi)有讀研究生,或者讀了但對(duì)數(shù)學(xué)沒(méi)興趣,建議還是不要去搞算法了。

我學(xué)歷就是個(gè)普通小本科,算法這方面簡(jiǎn)直是個(gè)白癡,不懂。算法是真的牛,算法yyds!

接下來(lái)是安全,這個(gè)我不知道有沒(méi)有人了解,也是個(gè)細(xì)分領(lǐng)域。包括芯片安全,網(wǎng)絡(luò)安全。

比如為數(shù)據(jù)加個(gè)密再存儲(chǔ)、比如給固件簽個(gè)數(shù)字簽名再燒錄到芯片,這都是安全工程師需要設(shè)計(jì)和考慮的。

未來(lái)萬(wàn)物互連,越來(lái)越多的家電產(chǎn)品,甚至汽車(chē)也都能用手機(jī)控制。所以,嵌入式、物聯(lián)網(wǎng)的安全不能忽略。

再后面是FPGA設(shè)計(jì),學(xué)習(xí)編寫(xiě)Verilog HDL語(yǔ)言,學(xué)會(huì)用硬件描述語(yǔ)言設(shè)計(jì)組合邏輯電路和時(shí)序邏輯電路,這也是一個(gè)比較細(xì)的一個(gè)分支,專(zhuān)業(yè)性非常強(qiáng)。

學(xué)習(xí)了FPGA之后呢,還可以再學(xué)習(xí)下設(shè)計(jì)CPU,包括流水線,取指、譯碼、執(zhí)行,總線,中斷異常等等這些硬件的設(shè)計(jì),這已經(jīng)非常非常底層了。

為什么嵌入式工程師要學(xué)習(xí)FPGA或者設(shè)計(jì)CPU呢?

我覺(jué)得這是底層原理,會(huì)底層的原理,解決上層的問(wèn)題會(huì)思路更開(kāi)闊,好比你明白TCP的原理,那如果HTTP出了問(wèn)題,你會(huì)更容易解決。

好,以上就是進(jìn)階機(jī)階段需要學(xué)習(xí)的東西了,此刻的你覺(jué)得興奮還是覺(jué)得可怕?

如果掌握了這些呢,工作中遇到的任何技術(shù)問(wèn)題,基本上沒(méi)有你解決不了的了。

進(jìn)階機(jī)階段,一般是工作至少5年吧,5年8年10年都有可能。想要理解和掌握,既需要不斷的學(xué)習(xí)理論知識(shí),也需要積累實(shí)踐經(jīng)驗(yàn)。

進(jìn)階機(jī)到此結(jié)束,馬上就要迎來(lái)最后一個(gè)階段,老司機(jī)階段。

讓我們來(lái)一起揭開(kāi)老司機(jī)的神秘面紗吧。

老司機(jī)

老司機(jī)階段,分了4個(gè)部分,技術(shù)、管理、行業(yè)、公司。

到了老司機(jī)階段,你不單單是一個(gè)懂技術(shù)的人了,還要懂管理、懂行業(yè)。

仍然可以繼續(xù)學(xué)習(xí)技術(shù),可以學(xué)一些橫向的技術(shù)擴(kuò)展,比如上位機(jī)、APP的編寫(xiě);測(cè)試工具、測(cè)試流程的學(xué)習(xí);有興趣可以學(xué)學(xué)Matlab仿真。

如果喜歡畫(huà)板子,可以多畫(huà)畫(huà)PCB;愿意做設(shè)計(jì),也可以學(xué)學(xué)工業(yè)設(shè)計(jì)、結(jié)構(gòu)設(shè)計(jì)這些知識(shí)。

那么管理呢,包括了這些內(nèi)容:

可以邊帶團(tuán)隊(duì)邊學(xué)習(xí)管理知識(shí),要依靠團(tuán)隊(duì)的力量實(shí)現(xiàn)你想實(shí)現(xiàn)的產(chǎn)品或者功能。

你還要有一定的行業(yè)認(rèn)知,就是你要懂行業(yè),我大概總結(jié)了幾個(gè)單片機(jī)涉及到的行業(yè):

不要把目光集中在手上開(kāi)發(fā)板的一畝三分地兒,要關(guān)注行業(yè)的市場(chǎng)空間,是否處在上升期。

要努力成為某個(gè)行業(yè)的專(zhuān)家,行業(yè)的專(zhuān)家,行業(yè)的專(zhuān)家!

什么是行業(yè)的專(zhuān)家?舉個(gè)例子,如果你在醫(yī)療行業(yè),那你就要懂些醫(yī)療方面的知識(shí)。

比如做個(gè)血糖儀,要學(xué)習(xí)血糖對(duì)人體有什么作用、正常血糖值是什么范圍,還要懂一個(gè)血糖儀是怎么設(shè)計(jì)、生產(chǎn)的,都有哪些人參與,客戶(hù)是哪些人,他們?cè)谀?,通過(guò)什么樣的方式或者渠道能把產(chǎn)品賣(mài)給他們,有沒(méi)有什么行業(yè)潛規(guī)則。

大家現(xiàn)在聽(tīng)我這么說(shuō)可能覺(jué)得很難,但其實(shí)沒(méi)多難,你如果喜歡一個(gè)行業(yè),那就去那個(gè)行業(yè)干幾年,稍微用點(diǎn)心,都不用太久,慢慢就不知不覺(jué)都學(xué)會(huì)了。

老司機(jī)的最后一點(diǎn)就是公司了,我列了整個(gè)電子行業(yè)上下游的產(chǎn)業(yè)鏈出來(lái):

從最上層的芯片原廠再到中間的模組廠傳感器廠、操作系統(tǒng)、云平臺(tái)、運(yùn)營(yíng)商,最后是B端或C端的硬件廠商,或者是集成商或者渠道商。

無(wú)論哪種類(lèi)型的公司,都會(huì)有嵌入式工程師的需求。

作為一個(gè)老司機(jī)的你,應(yīng)該了解你們行業(yè)中頭部、腰部、尾部的公司,了解他們的商業(yè)模式,他們的生存狀態(tài),了解同行在做什么產(chǎn)品,都有哪些業(yè)務(wù),為什么開(kāi)展這些業(yè)務(wù),這是一個(gè)老司機(jī)應(yīng)該懂的。

這些行業(yè)認(rèn)知和公司認(rèn)知,都是需要在多年的從業(yè)中,摸爬滾打獲得的,這些經(jīng)驗(yàn)在哪本書(shū)或哪篇文章中都是學(xué)不到的。

end

以上就是整個(gè)腦圖的全部?jī)?nèi)容了,看到這一定又有人會(huì)說(shuō)我在勸退了。

這亂七八糟的學(xué)科知識(shí)都需要學(xué),一看就頭大,一看就不想學(xué),好,那么請(qǐng)問(wèn)啊,你是想學(xué)哪種知識(shí)呢?有什么知識(shí)學(xué)會(huì)了就不用怎么動(dòng)腦,躺著就能數(shù)錢(qián)的,也教教我。

坦白說(shuō),我真的沒(méi)有在勸退。

剛剛畢業(yè)的我們參加工作,一定要樹(shù)立一個(gè)正確的職業(yè)觀。

沒(méi)有誰(shuí)的人生是簡(jiǎn)簡(jiǎn)單單的,也沒(méi)有誰(shuí)的職業(yè)生涯是輕松加愉快的。

既然一定是要去做一個(gè)職業(yè),那就不論是嵌入式還是大家知道的其他的,后端呀,Java呀,PHP啊,Python啊, 這些所有的語(yǔ)言,所有的知識(shí),你都是需要一個(gè)這樣的一個(gè)成長(zhǎng)階段的。

如果最開(kāi)始就樹(shù)立著一個(gè)長(zhǎng)遠(yuǎn)目標(biāo),就朝著老司機(jī)這樣的方向去邁進(jìn),有一個(gè)指引,我相信你會(huì)非常明確的,你會(huì)獲得一段成功的職業(yè)生涯和難忘的人生經(jīng)歷。

人的一生何其短暫,職業(yè)生涯多說(shuō)不過(guò)40年,我希望,當(dāng)你退休、回首往事的時(shí)候,不會(huì)因?yàn)樘摱饶耆A而悔恨,也不會(huì)因?yàn)槁德禑o(wú)為而羞愧。

全文完。如果對(duì)你有啟發(fā)有幫助,求贊、求在看、求轉(zhuǎn)發(fā),讓更多的兄弟看到。

后面我還會(huì)再出一期嵌入式linux的學(xué)習(xí)路徑,主要講Linux系統(tǒng)工程師的,歡迎大家關(guān)注起來(lái)。

到這了,大家再見(jiàn)!

END
來(lái)源:科巖成果,作者:科巖版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系刪除。
嵌入式ARM

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶(hù)體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(chē)(EV)作為新能源汽車(chē)的重要代表,正逐漸成為全球汽車(chē)產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車(chē)的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車(chē)的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車(chē)場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周?chē)娮釉O(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉