怎樣混好嵌入式/MCU/ARM/DSP這一行?

很多初學者,甚至是混了好幾年的老手,都在抱怨,電子這行怎麼競爭這麼大啊? 頹廢,這完全在抹殺自己的激情,沒了激情,搞電子,完全就是在浪費生命。其實,競爭真的大嗎??對比一下,難道做業務的競爭不大,做管理的競爭不大,現在這個社會,哪個領域,哪個行業,競爭都大。

 

所以,假如你想逃避競爭,那你就不用活了,當然,你本身家庭很好,父輩好有錢的話,那另當別論!所以, 不管什麼行業,競爭大不大的問題,都不用問了。答案都是:競爭大,但是必須面對,我們要自己面對的競爭越小,那麼你的技術能力應該是越牛X。搞電子的人要跟得上時代,但是人的腦袋會隨着年齡的增大而遲鈍,所以這就造成了電子人才(特別是搞電子軟件)的一種生老病死的自然規律。

 

也就是說,一般40歲左右的技術人才,有三種出路。

 

第一,自己創業了或者是技術管理層,完全脫離技術,請幾個二十來歲的新手,讓他們去發掘腦袋,自己在一旁,靠着自己的經驗,嘴巴說說可以了。

 

第二,轉行了,這個不好評論,不知是禍是福。

 

第三,繼續做技術,但是這種會很累,天天逼着自己學習,還喫力不討好,也不敢輕易換工作了,因爲此時編程思維固定,工作激情缺乏,學習能力偏低,一個新的工作環境很難讓他適應,這種情況,假如不是元老級人物,或者已經是個技術負責人,那麼很容易被一個新手所代替。也就是說,搞了十多年技術之後,這批人將慢慢的淡出這個行業,新老交替,長江後浪推前浪。

 

所以真正的技術人才永遠都缺,前提是你真的有能力。所以,只要有能力,你永遠都喫香的,永遠都不怕競爭,就不應該擔心競爭大不大的問題,而是擔心自己牛不牛的問題。

 

01
怎樣學好單片機? 

 

我大二就開始自學單片機(我們學校的單片機課程是大三開的,彙編版),那時候,我完全不懂什麼是單片機,照着書上的原理圖自己用萬用板焊接,按鍵,數碼管,串口,電位器,溫度傳感器,等等都不懂,反正就是照焊,不懂的,找網絡。程序一點都不懂,哈哈,還是照搬,寫好編譯,燒錄進去,行了,但是還是不懂。哈哈。但是這就給自己一個很大的自信心,記住,搞電子的人,永遠都是成就感第一,雖然不懂,做出來了,還是很有成就的。慢慢的,到了大三,開始學單片機和C語言了,老話,上課要專心。此時,重要的一點是,學了理論,要付之於實踐,我以前就經常跑實驗室,回去宿舍,也搞搞單片機,編編程序,調試調試開發板等等。這段時間很重要,同樣一起上課,爲什麼有些人就不適合搞電子,因爲此時,他們都沒有動手,忘得太快了。

 

學單片機,是軟硬件的綜合體。並不是單單會點彙編或者C語言就說會單片機,這頂多只能說會編程而已。因爲大部分單片機系統都是不帶操作系統的裸機系統,那麼沒有所謂的操作系統和應用軟件,沒有操作系統層所封出來的一些接口可用,也就是說,需要架一個簡單的前後臺系統,只會寫應用軟件,就比較難使用單片機,因爲他們對這些只有硬件,沒有軟件接口的東西,無從下手。所以,學單片機,首先學會硬件,也就是簡單的電阻電容電感,三極管,二極管,比較器,等等相關的基礎元器件特性及其應用。個人覺得,大學教程的模電數電很重要,先模後數,模電是數電的基礎,也是電子這塊的基礎,顯得特別重要。然後數電就要吸取其思想,很多數電所介紹的集成IC,比如門電路,計數器,觸發器,比較器,運算器等等,現在工業很少見的了,但是,其設計思想是值得學習的。

 

理解單片機內部的人就清楚,單片機或者其他的主控(ARM DSP等)的內部其實也就是這些東東高度集成而來的。所以,學單片機的時候或者之前,先抽時間學習一下模電數電,學到自己有所理解的程度,就可以學一下單片機編程,C語言或者彙編都可以,看個人愛好,C語言移植方便,好維護,編程快速,但是缺點是其編譯出來的CODE比較佔空間,一般用於移植性通用型要求高的嵌入式軟件領域,或者比較大的單片機項目,或者要求開發速度而對價格不敏感的產品。而彙編剛好相反,對利潤薄,成本低,開發難度不大的行業使用,比如小家電。不過現在的MCU也很便宜的,幾塊錢都幾十k的FLASH ROM,在現在技術人工那麼貴的情況下,估計還是C語言比較迎合市場。學習這些理論知識的同時,都需要動手做實驗,不怕搞錯,最怕就是懶得搞。

 

02
會編程之後,怎樣切入單片機?  

 

 

初學者學了編程語言的之後,又或者搞純軟件想轉單片機的人,都會有個共同的特點就是,下一步不知道如何入手?

 

那麼我就會問,你懂硬件嗎?要求不高,略懂就好,不求很精,因爲硬件這東西是越老越辣,越久越醇,鍛鍊多了,自然會精。

 

假如你一點都不懂,那請看上面的一段,學硬件基礎去吧。

 

假如略懂,那麼你現在的切入點就是在五花八門的單片機中找一款合適的入門單片機,初學者做任何決定都是以“易入手”爲標準,入手了,就不怕你以後跑不快,力求找些通用的MCU,資料多,軟件平臺也多,容易上手,比較51核的,雖然簡單,但是它是鼻祖,學起來方便,只要懂了這個鼻祖,其他的再複雜的東西,也不過它繁殖出來的,不會太難。一下子搞太難的東西,不單學不會,還會打擊自己的脆弱的心靈。

 

選好了單片機,那就搭開發平臺,首先是軟件開發平臺,針對不同的單片機內核或者型號,有不同平臺,通用性51核的KEIL51,AVR的IAR ICC,還有很多不同廠家的開發平臺,不一一列舉。其次就是單片機硬件平臺了,也就是開發板,不同的單片機器引腳和外圍都稍有不同,所以開發板也有針對性,網上很多賣開發板的,都希望做的很通用,支持很多種型號的MCU,價格也不高,假如怕麻煩,怕焊接出錯的初學者,可以買,關鍵是現在的開發板便宜,幾十塊錢很漂亮,以前那個年代動不動幾百塊,流血啊。當然,我更推薦是自己焊接,特別是自我感覺硬件還可以的人,趁此機會鍛鍊一下焊工,還有,會對電路理解更深的。其實各種各樣的開發板都是一樣的,只要你焊接遵循以下原則:

 

首先,焊接最小工作環境,電源電路,復位電路,振盪電路(現在很多MCU都集成內部晶振,精度也可以,頻率也比較高)。然後就是其他的常用的外設電路,按鍵輸入(按鍵多的話,可以用矩陣,學學矩陣掃描),串口(UART),AD/DA,蜂鳴器,數碼管,點陣顯示屏,電機驅動,溫度傳感器等等,這些資料很多的了,幾十年來,初學者都是學這些。

 

這些外圍電路,網上資料多得是,隨便找幾份對比一下就有了。找個萬用板,就可以動手焊了。不成功的,測量單片機工作電壓正不正常,晶振有沒有起振,復位電路有沒有搞錯等等,再不成功,焊多一塊,哈哈。有了軟硬件平臺,就可以一個實驗一個實驗的動手,開始是模仿,後來就改動,再後來就完全自己搞一個有新意的,從0開始寫code,做第一個屬於你自己的project。順便說一下,單片機的編程和純軟件的編程,除了編程思想和大部分語法可以沿用之外,其他的,寄存器配置和部分語法都有針對性,要花點時間去學的。學會了51之後,假如有時間可以學一下AVR PIC MSP430 等等其他內核的單片機或者功能更強大的51核單片機,宏晶,笙泉等等,作爲一種提高的練習。

 

03
ARM、DSP等主控難嗎? 

 

 

ARM 、DSP等,其實也屬於單片機一類,只不過它的內核牛X一點而已,兩種東西我都搞過,用了一段時間,但是,假如你就單單讓他作爲一種普通的單片機來用,那說明你不會用。

 

首先說ARM芯片吧,它的內核就是ARM內核,它的主頻高很多,普通的都有幾百M。CPU緩存大,分有很多級的流水處理線,這樣大大提高了CPU利用率。這種IC的資源足以讓一個嵌入式操作系統正常跑起來,WINCE, LINUX, UCOS 等等,一個操作系統移植到裏面去,跑起來,然後就自己利用操作系統的接口寫一些應用軟件,就可以直接控制其強大的外設了。當然了,這中間還有另外一種工程師在工作,就是嵌入式驅動工程師,他是專門針對硬件接口寫驅動的,封出來的接口就給上層的人使用,這種工作有點類似搞單片機的。很多人想從搞軟件直接搞ARM,那麼我的建議的是,除非你能力很強大,可以直接搞ARM,否則的話,先學單片機,再學ARM吧。

 

DSP,中文名叫數字處理器,看它的名字就知道了,它就是用來處理數據的,他的數據處理能力,比ARM強大的多,一般來說接口沒有ARM豐富,它的接口都是有針對性的,快速的存儲,快速的訪問,這都是爲了快速的處理數據而作準備的。它的主頻也是幾百M,DMA就肯定有的了。一般來說,圖片處理,視頻處理,網絡數據處理等等多是用DSP的。就是因爲它是用來做數據處理,那麼精通DSP的人,一定要精通各種數據處理的算法,什麼傅里葉等等,假如你將DSP看做一款MCU來搞,那太浪費了,100塊的東西當幾塊錢的來用。要用好它,物盡其用,那真的很難,要精通算法纔行。

 

04
嵌入式軟件是什麼東東?  

 

嵌入式軟件分爲嵌入式操作系統軟件,嵌入式應用軟件。大部分的嵌入式軟件都寄宿在ARM內核的芯片上,三星,飛利浦等等都有ARM內核的IC,做計算機軟件的人,很容易的就轉做嵌入式軟件,但是要做嵌入式驅動軟件的話,就有點難了,因爲這個涉及到硬件接口,一般都是搞單片機的人轉過去做的。這幾年,這個東西很火,用在數碼產品,比如MID,掌上電腦等,我在凌陽的時候,剛畢業進來的應屆畢業生都懂linux了,那個壓力啊,哈哈,是學校專門開課的,可想而知,想逃避競爭的人,不用想了。

 

嵌入式一直冠以高門檻的名號,相較於軟件開發遜色的起步薪資也被網友調侃“餓肚子”。熱情投入嵌入式的人比比皆是,無可奈何轉入產品經理或技術型銷售的也比肩繼踵。嵌入式工程師到底有沒有前途?

 

的確,由於嵌入式代碼量相對純軟導致起步工資低,但行業大牛的工資也非常可觀。另外以長遠目光來看,嵌入式滲透消費電子、安全安防、汽車電子、醫療電子、電信等等各個行業的計算機領域,而每年也約有40萬的人才缺口。今年機器學習(ML)話題大熱,Arm也推出神經網絡機器學習軟件 Arm NN,可在基於Arm的高能效平臺上輕鬆構建和運行機器學習應用程序,未來嵌入式行業也將不斷革新,嵌入式市場有所可期。

 

據知乎某15年從業人員看,對於嵌入式不必悲觀,也切莫盲目樂觀,不同時期不同人對前途的定義是不同的。他表示,影響前途發展的因素包括平臺、人脈、目標與機遇,有了更多的項目經驗纔有立足的機會,有廣闊的人脈關鍵時刻纔會有人拉一把,有了目標才能專注一個方向不斷髮展。另外,他還表示,切莫鑽技術“牛角尖”,管理崗能爬就爬,錯過機會,錯過年齡,追悔莫及也無濟於事。

 

還有網友表示,世上不只平均收入排名第一的行業從業人員可以高質量的生活,排名第二、第三、第四等等從業人員都有高質量的生活,而在排名榜單上光鮮亮麗的從業人員也未必過得大紅大紫。任何行業都與機遇、環境都有關,再好的行業也有混不下去的人,再差的行業也有人悶聲賺大錢。另外,時間在變,世事也在變,前幾年大熱的公務員,現在也逐漸被人嫌棄。所以在濃厚的興趣使然下,纔有可能成功。

 

另外,嵌入式這個魚塘也有攪渾水般的存在,嵌入式ARM也曾經發布過《不是嵌入式坑了你,而是你坑了嵌入式》一文(https://mp.weixin.qq.com/s/Xh1ks1mlQtSM29v7y2MvIg)。據瞭解,某知乎er最近面試的十幾個平均工作年齡超三年的硬件工程師,居然搞不清楚三級管mos管,甚至連三個腳的名字都可以搞錯,高低電平這種基礎知識也搞不清楚,令人意外的是,這種水平的人開口要價也基本10K+。高的並不是門檻,高的是可以踏踏實實幹好這一件事。

 

什麼是前途?個人興趣+努力程度+把握機會=前途。如果單純爲了喫飽飯,完全沒必要去學什麼嵌入式,嵌入式培訓入學門檻高、學費貴,赤裸裸的歧視本科以下學歷,歧視文科,培訓出來就業雖然年薪10萬起,但是沒基礎沒興趣學得會嗎?如果爲了喫飽飯,大千世界何其多的機會,何必折騰?

 

據貼吧某位大神分享,進入嵌入式的人形形色色,在此前有計算機專業的、有電子類專業的、有硬件工程師、有些甚至完全不相關,基礎也千差萬別。技術之路的終點也千差萬別,有的最後走上了管理,有些轉行做了產品經理,有的最後成了技術流的銷售,還有極少數的人成了真正的技術專家。而嵌入式工程師的的終點只有一個,就是真正的技術專家。

 

嵌入式技術大體上可分爲編程語言,內核技術,操作系統,總線接口,系統集成。其實細心的可以發現,在 CSDN的論壇分區上就已經體現了,除了系統集成只是在嵌入式系統大區裏面體現了下,其他的都有明確的板塊對應關係。但是學習之路並非如此學習,而是分爲幾個層次,據該工程師多年對業內的觀察,將嵌入式工程師的技術範圍分成下面幾個等級:

 

1.初級:8051或其他單片機,UCOS,I2C,SPI,UART。彙編和C能力一般,系統集成能力弱。

 

2.中級:在初級的基礎上,ARM/MIPS,其他一些RTOS並瞭解Linux,SDIO,USB。彙編和C能力不錯,有一定系統集成能力。

 

3.高級:主要是對中級的進階,這一個層面已經不在於掌握具體的技術,而是掌握當前流行技術中的基本思想和構成方式,所以任何流行的技術,對於這一階段來說,都是手到擒來的。而由於掌握了所有技術的原理,系統集成能力也是超強。

 

對於初級和中級,都有明確的標杆,在此階段,工程師還是在入行階段,評判標準往往是掌握了什麼技術,而學技術的最高境界是需要掌握了技術的構成和模式。拿個很簡單的例子來說,所有的接口技術,其實都可以歸納爲幾個要點,單工還是雙工、如何發起傳輸、如何應答、如何報錯、如何糾錯、如何在其基本傳輸之上建立高級的應用。只要掌握這些,接口技術便不攻自破。

 

最近業內普遍流行在某個平臺上編程而忽視深入的技術研究。Android也好,MTK的Tune Key也好,你只是在別人的指揮下舞蹈,而技術並沒有任何提升,提升只是更好的掌握了這個平臺,5年後呢?平臺退出市場了,掌握的這些還有什麼用處麼?學技術,要紮實,要從低至上。很多人一入門,首先想的就是,專注搞Linux和ARM應用處理器。在此之前,Linux裏面進程調度瞭解嗎?這不是“回字有幾種寫法”的問題,而是皮毛和骨骼的關係。按照技術的發展,完全應該先從UCOS之類的RTOS學起,然後慢慢學到Linux,會發現,Linux的最基本的東西,如系統調度,信號量,事件等,是和UCOS的原理類似的。而如果你一開始學習Linux,學到的只是如何在Linux平臺上完成你的事情。

 

最後說點實際的,現在Linux和Andriod是很喫香,也有很多人建議一開始就學習這些熱門技術,這樣能掙錢。沒錯,開始的時候可以速成,但如果從長遠來看,薪水也永遠只是在工程師的主流薪上波動,想要成爲技術大牛,年薪百萬,永遠不可能。技術需要從基礎做起,一步一個腳印,成爲頂尖,沒個三五年,難。不過能夠堅持下來的,必成大器。

 

學習嵌入式需要涉及哪些工作?

 

據21IC論壇分享,分爲四類工作:

 

1.  系統設計工作

 

在系統的設計階段,系統分析師將根據需求確定系統的硬件的基本構成,根據系統的需求選擇使用那種處理器,使用哪種操作系統,使用那些軟件開發工具。系統分析師往往是較爲完整的參與過嵌入式系統設計的全過程,對於系統應用的行業較爲了解,對於嵌入式系統本身的開發流程十分清楚的人。

 

2.    硬件設計工作

 

系統硬件設計人員需要根據系統分析師的設計結果,進行硬件原理圖的設計。通常需要硬件設計人員熟悉嵌入式系統的硬件構成。硬件設計人員需要了解常用的嵌入式系統處理器,存儲器(Flash,SDRAM),以太網MAC芯片,音頻/視頻編解碼芯片,電源管理芯片,總線接口電路 (USB,PCI),液晶顯示模塊,可編程邏輯器件(FPGA/CPLD),無線網絡通信模塊(Bluetooth,WLAN,GPRS)等硬件電路構成元素的基本工作原理,連接使用方法,使用注意事項,基本調試方法等內容。在網絡上能找到很多公司的評估板的原理圖,對於這些原理圖要仔細研究,摸清處理器同存儲器,網卡,液晶模塊等器件的連接方法和原因。通過對這些電路的研究,能夠較快地瞭解整個嵌入式系統的構成,這些電路同實際產品中的電路雖有一定差別的,特別是對於手持設備,但這些差別不影響初學者學習嵌入式系統的硬件設計基本構成。

 

3.驅動程序和操作系統移植工作

 

現代嵌入式系統的開發同傳統8位單片機系統的開發相比,一個顯著的區別就是嵌入式操作系統的廣泛使用。在拿到焊接完畢的電路板,並進行基本的測試後,就要進行驅動程序和操作系統的移植工作了。首先要進行的Bootloader的編寫和移植工作。Bootloader相當於PC系統的BIOS。對於有些嵌入式操作系統,如uc/OSII沒有bootloader同樣可以開發調試。但是對於WindowsCE和嵌入式linux系統而言Bootloader就是必須的了。

 

4.應用程序的開發

 

嵌入式系統的應用程序開發同在PC 機上開發應用程序的區別不是很大。對於Windows CE系統而言,Microsoft已經提供了較爲完善的開發工具。開發人員可以使用Windows 的C# 語言直接在PC上進行應用程序的開發和模擬調試,也可將目標系統同PC 機相連,進行聯機調試。現在有很多系統支持J2ME(JAVA的嵌入式系統版本) ,這使得JAVA 在嵌入式系統應用開發中佔有較大的優勢。另外,作爲專業的嵌入式系統軟件開發人員,還需要充分了解面向對象技術和設計模式等方面的知識,當然作爲初學者可以先不深入研究這方面的內容。同學們在學習嵌入式的過程中要不斷進行知識的探索,在一步一步學習之後就會有一個很大的進步。
 

05
談談PCB 

 

搞電子的人,不管你面對但是MCU,ARM, DSP,甚至是其他雜交變異品種,有一種東西是離不開的,那就是電路板。所以的元器件要發揮作用,都得焊在一個適當的電路板上面。PROTEL99 或者 PADS 或者DXP,這些都差不多,越後來出的,功能越強大,畫一些複雜的,比如嵌入式領域的板,一般都用功能強大的畫板軟件。還是那句話,畫PCB圖不難,但是要精就不簡單了,這裏涉及到電路原理圖的設計問題和很多佈線的原則,走線大小,間距,角度等等,一般的mcu控制板,對這些都不是很敏感的。但是電源板,高頻的,或者rf無線收發的板就對這種東西很注重了,干擾和抗干擾都要考慮到,濾波電容什麼地方放,多大啊,什麼的,都要注意。在大功率領域,線寬也比較講究,大電流的時候,銅皮不夠大,或者不夠厚,會發熱,很容易導致板燒燬,甚至元器件爆炸。還有很多很多注意的,這個又屬於專門一個純硬件領域,要自己多多學習相關知識,平時也要多練習纔行的。

 

一口氣說了一大堆,總結一下:搞電子,要先打好模電數電基礎,在學編程語言,然後就開始動手,再動手。數電模電好比基石,編程就是磚頭,永遠都需要你這個建築師傅來砌纔行的。最後,說明一點,技術是個無底洞,我也只不過茫茫技術海洋的一滴無名小水珠。全部觀點和經驗都是我自己的總結,不能說完全對,只能說,我是這樣過來的。

 

06

嵌入式發展前景與當今狀況


目前的嵌入式開發更傾向於智能化,也就是我們所說的智能硬件(硬件+軟件),從現在各種前沿的嵌入式產品來看的確如此,嵌入式產品的一個發展趨勢是更傾向與自動化控制和人機交互,而不是強調“算法”這一塊。

要區分你僅僅是一名嵌入式工程師而不是算法工程師,什麼一大堆“人工智能”、“阿爾法狗”、“深度學習”、“神經網絡”都不需要深入理解,那是研究生、博士生做的。

筆者並不是說你的能力不足,而是“術業有專攻”,這並不是一名嵌入式工程師的工作量,你需要做的僅僅是與他們的“雲端大腦”進行對接,調用他們API就完事了。

由於人工智能、深度學習、神經網絡、區塊鏈、大數據等先進學科的崛起,很多人都產生質疑:“嵌入式還有發展前景嗎”?

這個問題我在這裏可以很肯定地告訴你:“嵌入式有很好的發展前景,前沿嵌入式技術即將崛起,或者說已經崛起”。

的確,人工智能、大數據這些學科會給嵌入式帶來衝擊,就目前來看,大學生更傾向與python編程語言、機器學習這一塊,而嵌入式學者的確比往年有所下降。

但學者少了並不代表他的需求就少了,並不代表他的薪資水平下降了,目前的一個嵌入式技術更傾向於與智能學科相結合的趨勢。

以百度機器人爲例,機器人的核心是大腦,即是“數據和算法”,但機器人大腦想機器人身軀能夠像人類一樣活動,能說會道,行走自如,那麼就必須得依靠嵌入式技術。

這就是我所說的嵌入式+智能學科應用,從長久來看,嵌入式只會越來越火,智能學科的崛起必定帶動新型的嵌入式技術發展。

 

07

嵌入式開發技能大全

 

 

合格的嵌入式開發者應是多面手,應具備各方面的技能,包括從硬件到軟件到應用(電力系統保護,自動化,控制,人工智能,機器學習等),從單板到系統整機,從技術到管理,甚至吹拉彈唱也需要了解一點,做項目管理時可以提升團隊氣氛和豐富業餘生活。

 

嵌入式知識和技能體系龐大,樣樣精通者鳳毛鱗角,一般都是一專多能,各類技能多少都能說上一點。按照嵌入式開發層次關係,整理嵌入式開發者技能大全如下。

 

1、處理器

 

MCU架構及開發。MCU,俗稱單片機,把中央處理器(CentralProcess Unit,CPU)的頻率和規格作適當刪減,並將內存(Memory)、計數器(Timer)、USB、A/D轉換、UART、PLC、DMA等周邊接口,甚至LCD等驅動電路都整合在單一芯片上,形成芯片級的計算機,爲不同的應用場合做不同的組合控制。常見的MCU包括Intel的C51/C8051F系列,Motorola的68K系列,MicroChip的PIC系列等。

 

MPU架構及開發。MPC指微處理單元,一般不帶外圍器件(如存儲器陣列等),是高度集成的通用結構的處理器。典型如Intel的X86系列、飛思卡爾的PowerPC系列、P1系列,ARM架構處理器等。

 

DSP架構及開發。DSP採用哈佛結構,同一個時鐘週期內可以多次訪問存儲器,多級指令執行流水結構提高了系統的執行效率,DSP芯片常用於複雜的運算,典型如TI的TMS CXX系列,ADI的SHARC系列、Blackfin系列等。

 

2、CPLD&FPGA架構及開發

 

CPLD&FPGA作爲專用集成電路(ASIC)領域中的一種半定製電路而出現,既解決了定製電路的不足,又克服了原有可編程器件門電路數有限的缺點。通過可編程邏輯單元實現各種算法和組合邏輯。

 

基於CPLD&FPGA實現程序開發。包括RTL門級邏輯圖設計,VerilogHDL程序設計,VHDL程序設計,XILINX編譯軟件使用,ALTERA編譯軟件使用,低速串、並行通信控制器設計,高速串行通信控制器設計。

 

3、電路設計和分析

 

包括模擬電路和數字電路設計,包括器件DataSheet閱讀,原理圖及PCB閱讀等。

 

4、原理圖/PCB設計工具

 

Cadence,Altium,PADS,DXP等。

 

5、電路仿真工具使用

 

Multisim,Pspice,ADS,MATLAB等。

 

6、分立類電子元器件工作原理和選型

 

電路防護類器件,阻容器件,電感磁珠,DC/DC,晶振,二極管,三極管,穩壓管,光耦,MOS管,IGBT,繼電器,開關和按鍵,LED指示燈,PCB板用接線端子,交流互感器等。

 

7、集成類電子元器件工作原理和選型

 

AD,邏輯器件,DA,運放,計數器,觸發器,鎖存器,譯碼器,SRAM,SDRAM,DDR,FLASH,EEPROM,接口芯片等。

 

8、失效分析與可靠性

 

物料的構造與工作原理,金相切片,顯微觀察,PCB形變測量,HALT實驗技術,可靠性計算等。

 

9、硬件測試(器件、模件、整機)

 

元器件測試方法,模件、整機測試方法,元器件、模件、整機測試問題分析,國標、行標理解,EMC問題分析和解決等。

 

10、操作系統架構及開發環境

 

瞭解操作系統原理及基本編譯原理。操作系統提供CPU資源管理、外設驅動、內存管理、線程/進程管理、文件系統、網絡通訊、安全機制、界面管理等。嵌入式實時操作系統的基本特徵是事件響應的快速性和確定性,在嵌入式系統中廣泛應用。

 

通用操作系統包括windows、Unix、LInux等。目前在嵌入式領域廣泛使用的操作系統包括:嵌入式實時操作系統µC/OS-II、嵌入式Linux、WindowsEmbedded、VxWorks、FreeRTOS、QNX等,以及應用在智能手機和平板電腦的Android、iOS等。

 

11、底層驅動開發

 

VxWorks操作系統驅動開發,Linux移植,Linux開發,單板DTS配置以及根文件系統生成(Buildroot),U-BOOT移植和開發,C語言開發,Python語言開發,Makefile編寫,GNU編譯器及工具鏈的使用,Linux操作系統使用。

 

具體包括以太網驅動,SPI驅動,I2C驅動,文件系統驅動,CAN驅動等。

 

12、系統軟件設計

 

面向對象,設計模式,UML,嵌入式多任務開發,重構,多核開發等。瞭解常用的開發過程,如敏捷編程,測試驅動開發等。

 

13、系統軟件開發

 

熟悉開發語言,包括:C,C++,C#,QT,Python,JAVA,等。熟悉WEB 開發,開發規範等。

 

14、數據結構與算法

 

常用數據結構和算法,圖論算法,數字信號處理算法,小波算法等。

 

15、網絡與通信

 

計算機網絡原理,TCP/IP協議原理及分析,IEC61850規約(建模,MMS,SV,GOOSE等),103規約,104規約,DNP規約,Modbus協議,物聯網Zigbee協議,bluetooth,wireshark等報文分析工具,環網HSR協議,網絡安全等。

 

16、數據庫

 

數據庫原理與設計,SQLite/Access/MySQL/SQLServer/Oracle/大數據hadoop等。

 

17、界面和圖形庫

 

Zinc,UGL,QT,SVG,MiniGUI等。

 

18、應用知識(以電力系統自動化爲例)

 

電力系統常識,繼電保護知識,測控知識;智能變電站網絡架構,網分,故障錄波器,保信,遠動等。

 

19、調試和測試

 

軟件測試基礎,61850規約測試,網絡測試,時間管理測試,應用功能測試(繼電保護功能等),ATS測試開發與使用,Labview測試程序開發等。

 

20、項目管理

 

配置管理如版本管理工具Git使用等,項目計劃與任務劃分,項目進度跟蹤,項目協調等。

 

 

08
2020 年,嵌入式開發工程師的兩大必知必會

 

一、編程語言

 

當我們談及編寫圍繞硬件層運行的代碼時,最常提起的就是C語言。25年前,當我們從彙編語言過渡到C語言時,整個過程非常緩慢,且需求很高。如果你想進入嵌入式編程領域,那麼2020年C以及C++仍然是你應該重點學習的編程語言。

如果你想嘗試嵌入式編程,那麼可以從下面幾個方面着手:

 

  • https://www.learn-c.org/

 

Learn-c.org 是 Ron Reiter 的私人項目。雖然這個項目與嵌入式或硬件的關係不大,但作爲C語言入門還是很不錯的。

 

  • 買個微處理器

 

就我個人而言,實際操作纔是最佳的學習途徑。所以,你也可以買一個微處理器,實際接觸硬件,親眼看到實際結果纔是你最應該做的事情。你可以購買 Arduino 等流行的處理器,然後從一個小項目開始,真正瞭解硬件的工作原理。

 

  • 閱讀書籍和文檔

 

閱讀書籍和文檔是最關鍵的學習方式。你可以根據自己選擇的方向(嵌入式系統、固件開發、驅動程序開發等),選擇相應的書籍。

 

除了C/C++之外,該領域沒有真正佔據實際市場份額的編程語言,但是下面的新起之秀值得關注。

 

Rust

 

今年我一定要把學習 Rust 提上日程。有傳言說 Rust 是從C發展而來的,Rust 將在很多應用領域廣泛取代C。Rust 在嵌入式領域的發展非常迅速。如果我們比較 StackOverflow 網站上有關C、Rust 和 Assembly 的提問,就可以看到2019年有關 Rust 的問題數超過了 Assembly,而C在過去幾年中略有下降。

 

相對於C,Rust 有幾大優勢,最大的優勢之一就在於內存的安全性。Medium 網站上有很多關於 Rust 的文章,你可以通過閱讀了解 Rust 的所有優勢。此外,Rust 可以在許多微控制器上運行,這個 GitHub 代碼庫中彙總了大量信息(https://github.com/rust-embedded/awesome-embedded-rust)。

 

如果你想學習 Rust,那麼我強烈建議你訪問 Rust 主頁(https://www.rust-lang.org/)。這個網站提供了大量的入門文檔和教程。還有這本書《The Rust Programming Language》也是很好的起點。Rust 網站專門提供了有關嵌入式的說明(https://www.rust-lang.org/what/embedded),可以幫助你瞭解嵌入式設備上的 Rust 編程。

 

Golang

 

Golang?Golang!Golang 這種編程語言的潛力也超過了你的想象。目前,它主要運行在用戶空間,可以替代 Ruby 等後端語言,或用作用戶空間的應用程序,因爲它擁有良好的多處理器支持。

 

不過,我相信 Golang 會慢慢進入底層的編程。目前,它已應用在固件開發中,用於開發引導程序。隨着嵌入式設備上的 RAM、ROM 和 Flash 的容量不斷增大,將來也有可能在嵌入式設備上運行 Golang。 對於每位嵌入式系統程序員來說,Golang 絕對值得一試,而希望參與固件開發的人則必須學習 Golang。

 

二、硬件

 

除了編程語言之外,硬件設計方面也有一些有趣的趨勢。我想提及的第一件事情是:RISC-V。


RISC-V


RISC-V 是一種開源硬件指令集體系結構。它基於精簡指令集計算機原理,即所謂的 RISC。與 Arm 相比,製造商不需要支付許可費用即可使用 RISC-V。
 

面向服務器和消費者的硬件大多采用了x86硬件。我認爲 RISC-V 不會很快在這部分市場中贏得份額,但是它有可能應用於其他幾個市場。路由器和交換機等嵌入式設備以及智能手機制造商或物聯網設備都可能切換到 RISC-V 架構。
 

現在市場已有 RISC-V 的電路板,雖然價格仍然偏高,但值得關注。例如,眼前我的辦公桌上的這塊就是 SiFive HiFive Board。
 

big.LITTLE
 

最後我想談談 big.LITTLE 架構。最初它是由 ARM 發明的。原理是將低功耗的處理器(LITTLE)與功能強大、高功耗的(big)處理器相結合。同一時間內, LITTLE 或 big 只有一側處於活動狀態。這種架構應該能夠更好地適應當今的動態計算需求。
 

這並不是一個新想法,ARM 於2011年就提出了此項建議。但是似乎其他製造商也對 big.LITTLE 躍躍欲試。英特爾於2019年預覽的英特爾 Lakefield 異構處理器就採用了 big.LITTLE 架構。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章