不知道各位朋友有沒有發(fā)現(xiàn),公眾號改版了,現(xiàn)在的推送規(guī)則已經(jīng)不一定是按照時間順序了,有一些小伙伴甚至幾天收不到消息,要點進去公眾號主頁才能看到。
所以,為了賬號不會從您的訂閱表里面消失,請各位朋友將公眾號設置為置頂或者星標,就能第一時間收到推送~
-----------正文-----------
經(jīng)常有大學生同學糾結:
我到底是學STM32還是學嵌入式linux。
這個問題很多人都會有自己的看法,今天我試著從多個角度,把我了解到的事實講一下,希望對大家有所啟發(fā)。
首先得承認STM32確實好,好到STM32都成了單片機MCU的代名詞了,現(xiàn)在很多人甚至說單片機時默認就說STM32,實際上還有很多單片機的啊。
-
STM32的第一大好處就是:就業(yè)機會確實多,社會需求多。
當然我承認大家都有更遠大的理想,但是就算你想造火箭也得畢業(yè)后先能找到工作賺錢糊口開始。
所以如果你讓我學個東西都沒公司要,都找不到工作,那學它肯定錯了。
你不妨去各大招聘網(wǎng)站搜索一下,STM32相關崗位真的很多,你如果STM32玩的溜,找份工作真的不成問題。
而且大多數(shù)一二線城市都有工作機會,這一點更難得。
總結一下,學STM32肯定沒錯,這玩意至少能讓你有份工作。
-
STM32的第二大好處就是:他是很典型的MCU,可以讓你掌握足夠的MCU開發(fā)能力。
也就是說即使你在工作中需要用到其他MCU,譬如說NXP的LPC系列,Cypress、TI的MCU系列,而這些你從來沒接觸過完全不會。
但是,只要你熟練掌握STM32,就能很快上手這些MCU的開發(fā)工作。
-
最后,STM32還有個優(yōu)勢就是生態(tài)已成,影響力大。
目前很多國產(chǎn)MCU廠商如GD、國民技術等在推出的國產(chǎn)MCU也是對標STM32的,在開發(fā)方式甚至是固件庫方面都和STM32非常類似。
綜上,掌握STM32確實很有用,STM32最大的特點就是實在,掌握這項技能很有助你找到一份工作,在單片機軟硬件工程師這條路上能先上路,走出第一步。
也就是說,你學習STM32,其實學的都是單片機相關的技術。
譬如GUI方面,你學STM32可能會學emWin,或者touchgfx,或者littlevgl等,但是你幾乎肯定不會去學QT和android那些,因為STM32上一般不跑這些。(現(xiàn)在QT也有QT for MCU,也在STM32H7上做了合作,但是應用面有限,大部分人大部分項目不會使用)。
所以你學到的GUI技術全都是MCU領域使用的,而這些和主流的GUI的前端與業(yè)務邏輯分離的設計模式(典型的如微軟的WPF,Android,或web前端設計等)是有不同的,因此你學到的東西也是有局限的。
再譬如網(wǎng)絡應用方面,STM32大多數(shù)應用都不帶網(wǎng)絡,就算帶網(wǎng)絡往往也是用通信模組,很少會需要你基于socket層直接編程,而這才是網(wǎng)絡編程的關鍵技能。
所以很多做STM32多年的工程師,實際上對網(wǎng)絡很陌生,甚至是一竅不通。
客觀去看,STM32開發(fā)確實是電子相關專業(yè)同學可以去學習的一項技能。
或者說,如果你打算學單片機,那么STM32絕對是首選。
當然了,首選不是說只學STM32,其實我個人更推薦的單片機學習路徑是先用51入門,再進階到STM32,這樣更符合學習規(guī)律,學習效率會更高。
所以我認為正確的對待STM32的態(tài)度是:
-
-
第2條:不是必須學,假如你工作不是單片機開發(fā),其實不會STM32并不影響。
-
第3條:不要只學STM32,一定要擴展其他技能,否則面太窄了,太局限。
如果你STM32已經(jīng)學得不錯了,建議延伸學習linux。
很多人覺得linux使用沒有STM32廣泛,使用linux的設備遠沒有使用STM32的設備多,招聘崗位中l(wèi)inux相關也沒有STM32相關的多,所以不應該去學linux而應該去學STM32。
因為這個觀點把STM32和linux拿來對比了,然而這2個東西根本沒有可比性。
你對比這2個就好像對比自行車和小汽車,你說自行車的優(yōu)勢是便宜,好修理,不堵車,不用交停車費,不耗油等等,你可以說出來自行車相對小汽車的很多優(yōu)勢,然而該買小汽車的你給他個自行車行嗎?
小汽車是自行車的延伸,linux是STM32的延伸,是類似的道理。
我們說linux是STM32的延伸,
其實是從技術角度出發(fā)的。
也就是說從
技術的延續(xù)性,技術難度,技術拓展方向角度
講,STM32掌握后再去拓展linux是非常合適的。
譬如C語言,STM32用到的C語言特性和難度都要低于linux。
所以當你通過熟練掌握STM32的過程已經(jīng)一定程度掌握了C語言,再去學嵌入式linux,讀linux源碼時,就會發(fā)現(xiàn)自己的C語言功底得到了升華。
而你讀慣了linux內(nèi)核源碼后,再回過頭來看STM32的標準庫,HAL庫時,就會感覺簡單了很多。
比STM32更簡單的單片機,譬如51單片機,基本不使用庫函數(shù),都是程序員自己從零開始編程的。
51單片機的廠商一般也不會給你提供單片機的固件庫,主要是太簡單沒必要。
而STM32就需要固件庫,不管是早期的標準庫還是現(xiàn)在的HAL庫,都是芯片廠商提供的固件庫,來輔助程序員來進行開發(fā)。
和硬件相關的代碼部分成了linux的驅動層,板載硬件管理由linux內(nèi)核組建接管,客戶業(yè)務功能則由linux應用程序來完成。
如果需要網(wǎng)絡,GUI等功能,也都有非常專業(yè)的內(nèi)核層和應用層資源移植對接。
所以說,從技術角度講,嵌入式linux是完全覆蓋了STM32的。
Linux內(nèi)核可以說是整個開源軟件社區(qū)的集大成者,在過去幾十年間有大量世界級優(yōu)質(zhì)程序員向linux kernel貢獻代碼和思想,也有大量的第三方開源項目基于linux的某些組件或linux的設計思想來構建。
譬如國內(nèi)現(xiàn)在很火的
國產(chǎn)物聯(lián)網(wǎng)操作系統(tǒng)rt-thread
,你去讀它的源碼就會發(fā)現(xiàn),這完全就是linux的味兒啊。你去看華為的物聯(lián)網(wǎng)操作系統(tǒng)LiteOS,他的源碼中各個組件之間分隔對接的osal設計,也是linux kernel中大量使用的技巧。
因為它真的可以讓你一勞永逸的解決往后職業(yè)生涯中遇到的大部分技術需求。
我們學習技術有個很大問題就是:你今天永遠不知道明天會做什么工作,會需要什么技能。
可能你下個月開個新項目新任務,老大就會給你一個你根本沒聽過名字的東西讓你玩。你怎么才能快速上手呢?
我的經(jīng)驗,最靠譜的就是學好linux。
因為你會發(fā)現(xiàn)你遇到的任何東西都有l(wèi)inux的影子。
只要你學好了linux,有這個功底,
你學習任何新東西時都會很快
。
我當年下決心學好linux就是因為分配到一個指紋鎖研發(fā)的項目,用到的方案是一個新加坡科技公司開發(fā)的,他的開發(fā)環(huán)境是用cygwin,而我此前從未接觸過。折騰了半天搭建好環(huán)境我一看,這不就是linux的命令行嘛。還好我之前接觸過簡單的linux命令行,一下子感覺這個項目就不難了。
此后我就認識到linux的重要性了,下功夫好好學了linux,這么多年過來,太多事實案例證明,當時的決策非常英明。
最后說一句,永遠不要人為給自己設限,不要自己局限自己。
學51,學STM32這都沒錯,很實際,很接地氣
。
如果你用盡了全力也就能湊合學好這些,那就做單片機開發(fā),也能找到工作。
但是如果你還有余力,還愿意繼續(xù)下苦功學習,那么不要限制自己,繼續(xù)向更高層次進發(fā),永攀技術高峰。
-END-
若覺得文章不錯,轉發(fā)分享,也是我們繼續(xù)更新的動力。
5T資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、單片機、等等!
在公眾號內(nèi)回復「
更多資源
」,即可免費獲取,期待你的關注~
免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!