我現在從事的就是嵌入式軟體,而且是做了兩年硬體才轉過來做軟體。看到這個問題,我似乎看到了曾經的自己。我只講故事,希望對你有所啟發。

(一)我的大學

大一老師就跟我們講過專業的學習路線。

所以大學期間,所開的專業課程我都非常努力的學習。C語言,電路,模電,數電,信號與系統,微機原理,還有單片機。

C語言,基礎課。

大一開的課,我把譚浩強課後的習題擼了一遍。似乎人對走過的路總懷著遺憾,如果再給我讀一次大學,我絕對不僅於此。C語言對於嵌入式軟體太重要了,簡直就是代名詞。

電路,基礎課。

說實話,除了戴維南等效電路,還有變壓器變換計算公式,其他我都忘了。

模電,專業課

模電應該說是我們電信專業的第一門專業課,大二時候開的課。當時英雄聯盟火得一批,整天在召喚師峽谷奮戰,翹課回宿舍打遊戲。但好在實驗課都有認真在做實驗。

大三準備飛思卡爾(現在改成恩智浦了)智能車比賽的時候,為了調電路,想起模電老師推薦的日本人鈴木雅臣寫的模電書《晶體管放大電路》,網上淘了上下冊回來,把它們看完了,看完後再回頭看模電書,發現學校開課用的教材是偏理論,日本人的書更偏工程應用。至少,我是看了日本人的書,才懂得三極體運用和放大計算方法。當時車上的放大電路是用9013三極體搭的,效果還可以。不過比賽前,學長建議用運放。又把運放的章節認真看了一遍。放大電路改成了運放LM386放大。

賽前裝車

大四找工作的時候,準備面試,我又把模電複習了一遍。工作後,發現到自己設計電路時,還是會有問題,又重新翻出模電書看了一些用到章節。所以大學的專業書裡面,模電書是被翻得最爛的,而且是從大學一直帶在身邊。

數電,專業課

數電是硬體通往軟體的大門,因為它的邏輯就是0和1,它講到了邏輯門電路,寄存器。但這門課沒有模電那麼難理解,所以算是專業課裡面最好學的一門課。

信號與系統,專業課

咳,不說了,當沒學過吧。我曾經還非常認真地看過信號與系統……的目錄,手算傅里葉變換,如今我連該課程的老師的名字都記不得了。

微機原理,專業課

我覺得這門課同樣也是很重要的一門課程,這是區別科班出身和培訓機構出身的一門課。因為嵌入式的培訓機構上來就是教C語言,然後講點模電數電基礎,就進入開發板開始學習專業的開發內容。當然培訓機構這樣的課程安排並沒有錯,因為這是快速入門的手段。

但從專業的角度來說,學校把這門課程安排在單片機前面是有道理的。微機原理講到了計算機的最小系統組成。這對於單片機的學習是非常有幫助的。還有X86環境下的彙編編程,這些對於嵌入式軟體的學習也是非常重要的。如果直接跳過這門課,後面單片機的學習會有些蒙逼。

關於彙編學習,在這裡推薦王爽的書《彙編語言》,配合這本書實踐彙編編程,然後再看微機原理,更容易吸收。

單片機,專業課

我們大學單片機教材是msp430,是16位的單片機。對於當時的我來說,這單片機太複雜了,所以我在淘寶淘了51的開發板,自己看視頻學習。單片機學習就是邊看邊敲代碼。照著常式一個個敲。郭天祥的十天學會單片機應該說是當時最火的51單片機教程。現在我已經好久沒了解過了,應該經過這麼多年的發展,開發板市場已經一片紅海了,競爭壓力下,應該會有更多的優質課程。

單片機的軟體開發,已經是你說的嵌入式軟體開發了。單片機種類眾多,作為入門,還是推薦51單片機。去學習它的各種外設,中斷處理,RAM的資源消耗。

51單片機玩完後,我又買了msp430的開發板,不過不怎麼玩。

後來直接買了stm32的開發板。直接玩ARM Cortex-M3的內核。51是專業的入門,ARM才是主流,社會的需求。

對於32位單片機,不至於外設的學習。這個時候的你,應該要:

學會看晶元的Datasheet

學習別人官方提供的驅動寫法

學會使用庫開發

學習一種RTOS,比如說uCOS,或者FreeRTOS

最後,多做項目。

最後進階就是Linux的學習了。

(二)電子信息工程學生的迷惘

我也是從學生走過來的人,我太知道電子信息專業的同學迷惘些什麼了。電信專業是一個可軟可硬的專業,看個人喜好決定了。

我記得很清楚,我的電路老師跟我們說過一句話:「條條蛇都咬人。」 這句話的意思是無論你做什麼選擇,沒有一條道輕鬆的。

嵌入式行業待遇是屬於高不成低不就的。

嵌入式最火的時候是10年前,而我是2011年上的大學,那時候移動互聯網已經開始興起。

2011年高考結束,本來有望讀一本的成績,發揮不好,又不想復讀,我選擇了省內的二本學校電子信息工程專業。同期我的同學因成績太差上不了二本,選擇復讀,一年後選擇了同樣省內的二本學校,名次稍微還比我大學靠後,讀了軟體工程專業。

大學期間,我們都非常努力,當然可能比我更努力,據說是天天寫java到晚上十一二點。

大學畢業後,我去了廣州一家公司做硬體,2015年,待遇5500。我同學大三結束後到深圳公司實習,做安卓開發,實習期間工資7000。應證了雷布斯的那句話:「站在風口上,豬都能飛起來。」

同時,做嵌入式是很燒錢的,開發板要錢,調試不容易。不像純軟體一根網線一台電腦就可以幹活。但不管怎麼樣,我還是很看好嵌入式軟體。跟瞬息萬變的風口相比,它就靜靜地躺在那,它永遠都會被需要。

最後,需要掌握的技能--英語。

最後的最後,推一個我正在做的個人博客網站,一個做汽車嵌入式的小破站。

A9學習網?

a9school.com圖標

之前看過一個同學回答說,嵌入式是萬精油

從我這些年的從業經歷來說,是有一些正確的,如果需要從事嵌入式開發,要懂的東西比較多,當然,有一些比較細分的崗位,做的會專業一些,需要了解的面就會少一些,就處理好自己的那部分專業就可以了。

C語言

嵌入式軟體一定要精通C語言,這個是毋庸置疑的,大學期間,你可以不做項目,或者不參加比賽,但是你一定要精通C語言,C語言是嵌入式軟體開發中基礎的基礎,因為嵌入式離不開操作系統,操作系統99%都是用C語言寫的,你需要在原來的操作系統上開發需求,就需要非常熟悉使用C語言,就像一個刀客,他的刀一定要很鋒利。

數據結構和演算法

程序=數據結構+演算法

基本的一些濾波演算法,和一些基本的數據結構是一定要學習的,比如要你自己寫一個棧,自己實現一個隊列等等,都是需要你完成的,還有單向鏈表,樹,等等,剛開始可能覺得這部分非常難,但是到後面後,你就會發現,這些東西也是非常基礎的。

微機原理

覺得微機原理要在其他科目之前,因為嵌入式軟體需要非常清楚的知道操作系統的管理,CPU和外設通信,需要非常清楚知道中斷管理,內存管理等等,知道這些後,才能更清楚,操作系統設計的一些精妙之處。

能閱讀電路原理圖

嵌入式軟體要和硬體非常密切的溝通,所以能清楚硬體原理圖,清楚硬體設計的原理是非常重要的,還要非常清楚的知道每個硬體設計的一些小細節,GPIO口是必須的,比如上下拉這些基本的知識。

自我驅動學習

當你做到一定階段後,需要具有自我學習嗯能力,之前不是看到網上面試,說到自己不懂的知識的時候,就說,我現在不懂,但是我能夠自己學習,可以非常快速的掌握這部分知識,因為很多時候,項目上需要的技能,我們不可能都準備好了,這時候,你具備的學習能力就非常重要。

會使用一些儀器

我覺得示波器應該要能使用一些基本功能,還要邏輯分析儀,萬用表,穩壓電源等等,嵌入式軟體經常要檢查硬體上的一些問題,方便跟硬體嗯同事撕逼,哈哈,可以說是需要在硬體很忙的時候自己排查問題,這個是非常關鍵的。


終於翻到一個能稍稍聊一些的話題了。

先說下背景,我現在大三,開學大四,在準備秋招,求職意向——嵌入式軟體工程師。

學校是西安本地雙非一本,計算機科學與技術專業。

前幾天僥倖拿到了西安本地一家做LED控制公司的offer意向卡,沒細談薪資,HR給了個年薪範圍,我算了算,大概月薪稅前11k左右。

插一句,互聯網工資是真的高,昨天還在知乎上一個「西安某大學好還是某大學好」的話題下看到同校同學院同級的同學大曬自己實驗室的平均年薪——27萬+,嚇得我沒敢說話。

還是得說一句,互聯網工資真tm沒天理地高!

但嵌入式也差不到哪裡去,小結一下的話就是「比上不足,比下綽綽有餘」,畢竟現在風頭能蓋過互聯網行業的還真沒幾個,某些意義上確實是一種「福報」。

扯遠了,拉回來————

我是大三開學接觸的嵌入式,最開始是淘寶買的原子的一塊stm32mini板,然後整個大三上學期就是學習原子的常式以及做了一些小實驗,實驗的話就是智能小車之類。

大三寒假在網上搜嵌入式相關職位和就業方向,一下子就發現了新天地——linux,這才發現只玩個單片機真的是太low了,而且只會個單片機找工作也不好找。

然後寒假就用壓歲錢在網易雲上買了91嵌入式學堂的課程,主要學習了linux下一些簡單地應用編程,比如進程、線程、套接字、IO流等。

91的課程數量還可以,我沒全看完,因為有很多東西他講的都比較粗略,我看完以後暈暈的,但至少還是有一些嵌入式體系在裡面的,比如arm彙編、bootloader、linux設備驅動、linux應用編程、QT這些知識。

QT講的還行,等秋招完了以後我再系統學學。

我當時大三開學後決定深造linux設備驅動這方面,因為這方面有一些深度,工資也算客觀,於是我在淘寶買了韋東山的課程和開發板,整個大三下學期都在學linux設備驅動。

驅動入門確實難,但只要理解了各個驅動框架就會事半功倍,我這裡極其推薦宋寶華的書《linux設備驅動開發詳解第二版》,配合韋東山的視頻,效果確實不錯。

小結一下學習路線——C語言、stm32單片機入門、嵌入式linux應用編程、嵌入式linux設備驅動程序。

C語言就不說啥了,我啃的C primer plus,看了C和指針,你選什麼資料那就是仁者見仁了。

單片機入門主要我就是看技術手冊和原子的視頻和常式,這裡還是強調下動手能力,不做些小項目真的不行。

linux應用編程是看91的視頻入門的,後來在圖書館借了相關的書又夯了一遍基礎。

設備驅動程序是看韋東山的視頻、宋寶華的書入的門。

這之間的一些什麼shell腳本、linux常用命令、makefile之類,我就不列舉了,總之就是需要啥就去學啥。

嵌入式這方面太廣了,很多公司都招嵌入式,但不同的公司嵌入式軟體工程師做的事可能是完全不同的,我建議題主去看看各個招嵌入式崗位的大公司的招聘要求,比如華為、海康、CVTE、小米、OPPO、VIVO、中興等等,看完以後你肯定會有很多收穫。

————————

昨天陝西省電賽出了結果,我們組運氣好拿了個省一等獎,感謝楊超越。

我畢業想留西安,過些天想投一下華為,雖然華為對雙非不感冒但我還是想試試,因為在我心裡華為真的是一家很牛逼的公司。

看到很多勸題主轉互聯網的,我建議題主還是沉下心來找准方向,互聯網工資是高,但畢業就能拿到我開頭說的年薪27萬+,還是少數。

再說一句的話就是不管走哪條路,技術一定要過硬!因為當你找工作的時候回發現,跟你競爭的還尼瑪有很多研究生!

——————————10月26日添——————————

工作基本定了,留在西安,月薪9k轉正10k*(14-16),本科生嵌入式拿這個算中等偏上一點吧,我也算基本滿意。但前兩天微信遇到個廣東研究生,跟我投了同一家公司,剛去就給開15k,我tm真的的酸了!!!!!!


我一直把嵌入式分為廣義和狹義兩方面,廣義上的嵌入式包含單片機類和ARM+Linux類,狹義上的嵌入式就是ARM+Linux類。

單片機類又分為兩個方向,搞軟體還是硬體,大公司分的比較細,小公司的一些項目可能從出原理圖到打板,再到編程調試一個人就幹了。有的人靠單片機軟硬體這門手藝就吃一輩子了,做做小產品之類的。有的人瞧不起搞單片機的,認為太簡單沒啥意思。這東西說簡單也簡單,說難也很難。模擬電路博大精深,夠喝一壺了,但是現在純搞模電的比較少了,都是集成IC搭積木。單片機編程涉及到控制演算法的也很有意思了。但是搞單片機如果只是編編業務流程,那確實簡單。

ARM+Linux類又分為搞驅動層還是應用層了。驅動層顧名思義就是寫驅動了,一般只是改改驅動,不會從頭開始寫。應用層涉及到圖形界面你是搞安卓還是搞Qt

對於近些年興起的技術,例如計算機視覺和圖像處理,機器學習等等AI領域,如果是985211學校並且數學學的好,可以往這方面努力,專精一門。

總之嵌入式是個大類,方向非常多,不可能點亮所有技能樹。一專多能是最好了。


推薦先看看:

史上最詳細嵌入式系統設計師修鍊手冊: https://www.jianshu.com/p/84e8399c1f3d

全國計算機技術與軟體專業技術資格考試——嵌入式設計師考試大綱:

2013全國計算機軟考大綱:嵌入式系統設計師?

www.51test.net圖標

上述已經非常詳細地給出了學習內容及路線,希望對你有幫助!

如果覺得學得不錯了,可以試試報考軟考中的這個——嵌入式設計師,這是一個中級資格考試,比較難,覆蓋範圍也挺廣的。拿到這個資格證書的話,找工作對於你來說沒難度了,加油!


推薦閱讀:
相关文章