當(dāng)前位置:首頁 > 公眾號精選 > 嵌入式微處理器
[導(dǎo)讀]身邊朋友問我如何學(xué)習(xí)嵌入式,在這個(gè)行業(yè)健康的發(fā)展。我一直未能做一個(gè)系統(tǒng)的回答。這里我想寫篇文章,徹底的回答這個(gè)問題。嵌入式,這是個(gè)術(shù)語。在我看來,嵌入式系統(tǒng)是:為了應(yīng)用高度定制軟件和硬件的計(jì)算機(jī)系統(tǒng),滿足一系列的特定應(yīng)用需求。國內(nèi)普遍認(rèn)同的嵌入式系統(tǒng)定義為:以應(yīng)用為中心,以計(jì)算機(jī)...

身邊朋友問我如何學(xué)習(xí)嵌入式,在這個(gè)行業(yè)健康的發(fā)展。我一直未能做一個(gè)系統(tǒng)的回答。這里我想寫篇文章,徹底的回答這個(gè)問題。
嵌入式,這是個(gè)術(shù)語。在我看來,嵌入式系統(tǒng)是:為了應(yīng)用高度定制軟件和硬件的計(jì)算機(jī)系統(tǒng),滿足一系列的特定應(yīng)用需求。國內(nèi)普遍認(rèn)同的嵌入式系統(tǒng)定義為:以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗等嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。IEEE(國際電氣和電子工程師協(xié)會)對嵌入式系統(tǒng)的定義:“用于控制、監(jiān)視或者輔助操作機(jī)器和設(shè)備的裝置”。
原文為:Devices Used to Control,Monitor or Assist the Operation of Equipment,Machinery or Plants。(此段來自百度)?
從我個(gè)人的理解,到普遍的定義,再到IEEE的權(quán)威??梢钥吹?,嵌入式系統(tǒng)首先是計(jì)算機(jī)系統(tǒng)。我們不能忽略這個(gè)問題。既然是計(jì)算機(jī)系統(tǒng),那么學(xué)習(xí)嵌入式,計(jì)算機(jī)的基本理論知識我們要不要學(xué)習(xí)呢?比如說,編譯原理、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、離散數(shù)學(xué)、計(jì)算機(jī)系統(tǒng)體系結(jié)構(gòu)。個(gè)人認(rèn)為,沒學(xué)走,就學(xué)跑是非常要不得的。
很多人意識不到這點(diǎn)。加之國內(nèi)很多學(xué)校沒有培養(yǎng)嵌入式的專業(yè),沒有相應(yīng)的人才輸出。很多學(xué)習(xí)嵌入式的人都是從電子類的專業(yè),自動(dòng)控制類的專業(yè)等等轉(zhuǎn)過來的。這個(gè)轉(zhuǎn)型也意味著理論上的巨大缺憾。如果要問,排序算法有幾種,恐怕只知道冒泡和希爾,不知道堆排序,快速排序,基數(shù)鏈?zhǔn)脚判蜻@些算法,更不知道還有內(nèi)部排序和外部排序之分。查找算法只知道個(gè)基本的2分查找。對于樹的查找算法一無所知。怎么說呢?
也許很多從業(yè)的程序員,不乏專業(yè)水平相當(dāng)優(yōu)秀的,認(rèn)為這些并不重要。我只能說,你命好,做這種具體的工程大于理論的東西。實(shí)際上,如果從一個(gè)嵌入式的程序員成長為系統(tǒng)設(shè)計(jì)者,或者更高的技術(shù)職位,要從更深的層次看問題。理論起到了非常大的支撐作用。

比如說,設(shè)計(jì)一個(gè)普通的微波爐控制系統(tǒng)。說實(shí)話,這個(gè)代碼應(yīng)該是非常簡單的。但是,作為精細(xì)的設(shè)計(jì)者,不僅僅要考慮需求是否完成。還用從整個(gè)程序的空間雜度、時(shí)間雜度上去分析,并降低整個(gè)代碼的復(fù)雜度。從而進(jìn)一步降低軟件結(jié)構(gòu)、算法實(shí)現(xiàn)對處理器的要求,達(dá)到對成本的節(jié)約。一般來說,成本不光光是BOM成本,還包括人力成本,運(yùn)營成本,開發(fā)成本,維護(hù)成本等等。任何軟件系統(tǒng)都要測試,然而一份代碼要怎么才能比較好測試呢?
這個(gè)問題并不好回答。我這里先賣個(gè)關(guān)子,回頭我在另外一篇文章里詳述。尤其是嵌入式代碼,測試方法雖然沿用了PC機(jī)的一些做法,但是仍然有許多工程限制。做起來難度頗高。馬克思說過,一切的節(jié)約可歸結(jié)為時(shí)間的節(jié)約。代碼結(jié)構(gòu)簡單,空間雜度小。那么也意味著更小的工程量,更短的測試時(shí)間,更穩(wěn)定的產(chǎn)品質(zhì)量。
如果是個(gè)理論性稍微強(qiáng)點(diǎn)的產(chǎn)品,汽車導(dǎo)航系統(tǒng)。地圖的路徑搜索算法。定位位置的搜索,以及地圖的分類加載優(yōu)化等等,都不是太容易就能做好的。更需要堅(jiān)實(shí)的理論基礎(chǔ)。許多剛出學(xué)校的大學(xué)生朋友們,沒出校門就把相關(guān)的知識還給老師了。其實(shí),我經(jīng)常問公司新來的同事,設(shè)計(jì)算法的思路是什么?
這個(gè)是從計(jì)算機(jī)的角度去考慮一個(gè)問題的解決辦法。很多新人是計(jì)算機(jī)畢業(yè)的都無法完整的回答我的問題,失望之余,更想說的是:經(jīng)驗(yàn)很重要!但是比經(jīng)驗(yàn)更重要的是知識,比知識更重要的是方法。在理論的指導(dǎo)下去積累經(jīng)驗(yàn)。減少從經(jīng)驗(yàn)下獲取知識,減少體驗(yàn)式學(xué)習(xí)這種狀態(tài),養(yǎng)成系統(tǒng)的認(rèn)識分析問題的方法,理論聯(lián)系實(shí)踐的方法,實(shí)踐檢驗(yàn)真理的方法,經(jīng)驗(yàn)必須能被理論解釋的方法。

所以,這第一點(diǎn)建議,就是希望從事嵌入式的朋友能把計(jì)算機(jī)基礎(chǔ)課程全部系統(tǒng)的學(xué)習(xí)一遍。

我們還是來看嵌入式的定義,這個(gè)定義是相對的概念。什么計(jì)算機(jī)系統(tǒng)不是“高度定制的軟硬件計(jì)算機(jī)系統(tǒng)”呢?PC機(jī)。不嚴(yán)謹(jǐn)?shù)恼f是這樣。嵌入式在工程上有非常多的特點(diǎn),相對于PC系統(tǒng)說,如果把PC系統(tǒng)看成一個(gè)完全的標(biāo)準(zhǔn)的“大嵌入式系統(tǒng)”,我們用大鵬鳥來形容它。那么,像“蜂鳥”這樣的最小的小鳥,像“麻雀”這樣的常見系統(tǒng)。也就不難理解了。從技術(shù)上講,PC系統(tǒng)的知識量,難度都要比一般的嵌入式高出N個(gè)數(shù)量級。但由于PC系統(tǒng)在計(jì)算機(jī)歷史上發(fā)展得比較早。
因而,其智力投入、完善性、應(yīng)用的廣泛性重要性是別的系統(tǒng)平臺無法比擬的。然而,正因?yàn)榘l(fā)展了這么久,其平臺的封裝性穩(wěn)定性是非常高的。操作系統(tǒng)級,支撐軟件級,應(yīng)用軟件級。特別是應(yīng)用軟件級,一些與平臺無關(guān)的軟件,基本上很少涉及操作系統(tǒng)的知識,以及一些內(nèi)部的原理。如瀏覽器里的Javascript開發(fā),基本上不涉及操作系統(tǒng)的知識,只是受不同的瀏覽器的影響;又如Java,只涉及較少的系統(tǒng)平臺的知識;就算是C/C 語言,開發(fā)應(yīng)用程序,也就是一套API的應(yīng)用。涉及的操作系統(tǒng)的東西也只是冰山一角。
由此可見,PC平臺的優(yōu)良封裝,極大的簡化了問題的復(fù)雜度,使開發(fā)者和應(yīng)用者能把主要精力放在自己的業(yè)務(wù)上,提高開發(fā)效率。嵌入式領(lǐng)域就沒有這么幸運(yùn)了。其為應(yīng)用的高度定制,造成了以效率,應(yīng)用為優(yōu)先的特點(diǎn)。封裝層次太多必然對效率有所傷害。同時(shí)規(guī)模變大,測試變得復(fù)雜。開發(fā)周期變長。所以嵌入式的層次結(jié)構(gòu)相對于PC系統(tǒng),邊界沒那么清晰,封裝考慮的問題沒有那么全面。完成同樣的一個(gè)工作,需要了解的內(nèi)容更多,才能做得更好。
如果一定要拿嵌入式和PC系統(tǒng)比,個(gè)人覺得,PC系統(tǒng)的開發(fā)有時(shí)候比嵌入式系統(tǒng)還要難。由于封裝的比較完善,PC開發(fā)的門檻比較低,但是做好,做精通,做全面,比嵌入式難多了。嵌入式因?yàn)橐婚_始就要了解相當(dāng)規(guī)模的東西,所以入門的門檻變得比較高??v觀這些東西,其實(shí)PC系統(tǒng)和嵌入式系統(tǒng)很大一部分都是重疊的。
所以,第二點(diǎn),我推薦大家讀(俞甲子 / 石凡 / 潘愛民)寫得《程序員的自我修養(yǎng)》。這里多說兩句,首先,嵌入式只是比PC開發(fā)要多了解些東西,本質(zhì)上來講并無區(qū)別,這些知識當(dāng)中有一半是與具體工程相關(guān)的東西。也就是說,照著流程做,并無太多的為什么,如果硬要問為什么,其實(shí)也就是一些工程上的需求。一些嵌入式應(yīng)用之間可能略有一些區(qū)別,可能有些區(qū)別還很大,但大致的流程還是相似的。有個(gè)比較好的PC開發(fā)功底,了解了這些流程,開發(fā)嵌入式應(yīng)該是沒什么特別的障礙的。
其次,《程序員的自我修養(yǎng)》這本書是針對PC平臺的,書中的許多東西是PC平臺特有的,比如說動(dòng)態(tài)加載等。但理解動(dòng)態(tài)加載也會對Bootloader加載應(yīng)用程序和操作系統(tǒng)有一個(gè)直觀的比較。由于并不是針對嵌入式平臺的(我沒發(fā)現(xiàn)有專門講嵌入式的書),所以,很多東西需要自己在嵌入式中去體會。另外書中對一些嵌入式中比較在意的問題描述的并不夠詳細(xì),比如說鏈接腳本還有ABI。PC平臺這些問題被很好的封裝起來了。所以,有些問題在嵌入式領(lǐng)域,還需要進(jìn)一步深挖。這本書作為嵌入式入門的理解是非常合適的。

嵌入式在工程領(lǐng)域最大的問題是軟硬件同時(shí)成熟,出了問題容易踢皮球。這里就很容想到調(diào)試。嵌入式的問題定位較為復(fù)雜,尤其是牽涉到軟硬件的復(fù)雜問題。首先嵌入式的調(diào)試手段較為單一。相對于PC平臺,穩(wěn)定性和可靠性都要打折扣。這里不僅包括調(diào)試平臺的問題,也包括一些調(diào)試手段對代碼的影響,諸如改變代碼的運(yùn)行時(shí)間,改變了代碼的動(dòng)態(tài)行為(頻度,觸發(fā)時(shí)差等)。做嵌入式對系統(tǒng)更加要有個(gè)全面的認(rèn)識。這里包括從設(shè)計(jì)方法思路,設(shè)計(jì)目標(biāo)要求,硬件的詳細(xì)設(shè)計(jì)和軟件的詳細(xì)設(shè)計(jì)。了解的越深刻對問題的定位越有幫助。
這里就涉及到一個(gè)最大的問題,也就是剛出校門很多學(xué)生對自己的憧憬:要軟件硬件都通。這個(gè)目標(biāo)向大家坦白,我也憧憬過。當(dāng)我現(xiàn)在招聘學(xué)生的時(shí)候,甚至有些工作經(jīng)驗(yàn)的人都說出這個(gè)目標(biāo)。這個(gè)目標(biāo)不是錯(cuò),只是計(jì)算機(jī)軟件和硬件這兩大塊都是非常廣袤的領(lǐng)域,說通,目標(biāo)的確有點(diǎn)點(diǎn)高了。
所以在這里,我常常給同事的建議是:如果你的專業(yè)是電子類的,可以把精力主要的放在硬件上,軟件只作為兼顧,學(xué)習(xí)一些C語言的基本知識,寫一些小型代碼,不宜把目標(biāo)放在全職編程上。如果是計(jì)算機(jī)專業(yè)的,我建議把主要精力放在軟件上,學(xué)會看懂原理圖,了解一些電路的大致功能就可以了。兩方面往深里面去都是無底洞。全通的話,的確要些大本事的。這里只是我的建議。理由也很簡單,人都是經(jīng)營自己的長處,規(guī)避自己的短處。

曾經(jīng)有一個(gè)朋友問我嵌入式問題,想成為軟硬都通的人。想給自己的職業(yè)規(guī)劃一下,我大致的問他幾個(gè)軟件問題,比如說,算法的設(shè)計(jì)思路,排序算法的種類,搜索算法的種類,操作系統(tǒng)的本質(zhì),互斥多線程等等基本問題,回答毫無頭緒。然而問起電路的知識,KCL,KVL,競爭冒險(xiǎn),運(yùn)放的分析方法,信號與系統(tǒng)的基本知識,對答如流。
這種人去主攻軟件,是資源的極大的浪費(fèi)。等你軟件入門了,硬件方面的設(shè)計(jì)知識也忘得差不多了。然后面臨事業(yè)更上一層樓的壓力,軟件需要學(xué)習(xí)的東西比較多,基礎(chǔ)理論差,學(xué)什么都吃力。硬件方面缺乏調(diào)試和經(jīng)驗(yàn)/的積累,也很難有所作為。若干年后只能做配角,精力的下降,事業(yè)上的失意,只能讓自己淪為屌絲。
這里又提到項(xiàng)目經(jīng)理,技術(shù)總監(jiān)這樣的技術(shù)管理職位,不是說你技術(shù)好就可以做這個(gè)職位了。首先各個(gè)公司這兩種職位都是有所區(qū)別的,但一般來講都是偏向管理的。既然是管理,不能用別人管你的時(shí)候,你得到的體驗(yàn)再去管別人,要學(xué)習(xí)管理理論。諸如PMBOK,CMMI,好好看看行業(yè)內(nèi)優(yōu)秀的工程實(shí)踐,好好看看項(xiàng)目目標(biāo)如何對齊。這些理論知識都是指導(dǎo)我們實(shí)踐的最有效的手段。不要寄希望自己是牛人中的牛人,可以發(fā)明新的理論。
請大家看看歷史,每個(gè)行業(yè)都有個(gè)開山鼻祖,那時(shí)候水平還比較低,然后發(fā)展一段時(shí)間后有一個(gè)將這個(gè)行業(yè)壯大的牛人。這個(gè)并不僅僅是因?yàn)槟莻€(gè)牛人牛,也有因?yàn)檫@個(gè)行業(yè)積累到一定的時(shí)間,可以出這樣的一個(gè)牛人將這個(gè)行業(yè)進(jìn)一步壯大。這是事物發(fā)展的客觀規(guī)律,我們必須要尊重。但在中國,技術(shù)人是一類特殊的人群,他們因?yàn)榧夹g(shù)而傲,對于不懂技術(shù)的領(lǐng)導(dǎo),私下缺乏應(yīng)有的尊重和誠服。容易造成政令不通。項(xiàng)目經(jīng)理,總監(jiān)更應(yīng)有好的技術(shù),以便得到下屬最大的認(rèn)同。

所以這第三點(diǎn),要綜合自己的專業(yè)情況,知識背景,合理的選擇自己的職業(yè)目標(biāo)。在嵌入式領(lǐng)域找到自己的發(fā)展空間。

最后是一些雜項(xiàng),我也不分類了。學(xué)習(xí)嵌入式的方法多種多樣。但最好的辦法,還是求助于計(jì)算機(jī),計(jì)算機(jī)是自己的第一老師,人都是第二位的。不要指望通過牛人,你就可以變成牛人。學(xué)習(xí)知識,實(shí)際上是自己對知識建立理解的過程,不要第一時(shí)間去聽大牛的講解。
首先要有自己的理解,即使是錯(cuò)的,我認(rèn)錯(cuò)。再通過大牛的講解進(jìn)一步的學(xué)習(xí),糾正調(diào)整自己,可以事半功倍。如果沒有自己的思考,自己也只是個(gè)鸚鵡學(xué)舌的人,缺乏創(chuàng)造力和獨(dú)立面對問題的能力。久而久之是非常可怕的。
不要想通過幾個(gè)月培訓(xùn)機(jī)構(gòu)的學(xué)習(xí),就能像屌絲吃了全能丸,拿到高薪。如果真是這樣,這世界里有時(shí)間有錢的人多了,他們?yōu)槭裁床荒芡ㄟ^這種辦法變得更有能力,拿到更高的收入?高薪背后意味著很多內(nèi)涵和外延,這些內(nèi)涵和外延不僅僅包括點(diǎn)點(diǎn)知識和技術(shù),還有做事的態(tài)度方法,面對問題的堅(jiān)韌……太多了。一句話,在自己想把自己變得更強(qiáng),首先尋求的是能力的全方面的提升,不光光是點(diǎn)點(diǎn)技術(shù)。所以,面對這種問題一定要踏實(shí)。
你要求的薪水高,公司對你的期望也高;每個(gè)公司都有特殊的東西,那不是一兩天就能學(xué)會的,也不是技術(shù)能替代的。自己把調(diào)子提得那么高,要么慘淡收場,要么勉強(qiáng)完成任務(wù);要么驚艷四座。自己看著辦。想反,薪水提得不高不低,給自己一點(diǎn)點(diǎn)時(shí)間,企業(yè)對你的期望低,能做出點(diǎn)成績,反倒容易讓別人刮目相看,利于自己的長期發(fā)展。這里還是有許多學(xué)問的。自己的人生,一定要謹(jǐn)慎經(jīng)營。

學(xué)習(xí)嵌入式一定要勤奮,編程是一種體力 腦力的活。熟能生巧,這是常識。十萬行的編程量是基礎(chǔ)。寫一些復(fù)雜的算法,如A*,樹等等算法;再寫一些計(jì)算機(jī)圖形學(xué)方面的算法,以應(yīng)用軟件為目標(biāo),把自己的編程量撐到十萬行。這樣的強(qiáng)度能保證自己對所用的語言有一個(gè)非常的熟練程度,也能對計(jì)算機(jī)的算法設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)有個(gè)深刻的認(rèn)識,同時(shí)對操作系統(tǒng)的API也能略微熟悉。若能堅(jiān)持這種訓(xùn)練到達(dá)三十萬行。那么就會更加的優(yōu)秀。可為進(jìn)一步的行業(yè)發(fā)展,打下堅(jiān)實(shí)的基礎(chǔ)。

END
來源:網(wǎng)絡(luò)版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除。
嵌入式ARM

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

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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉