{eval=Array;=+count(Array);}
謝謝邀請(qǐng),作為一名嵌入式開(kāi)發(fā)工程師,由我來(lái)回答這個(gè)問(wèn)題。
STM32軟件工程師和linxu軟件工程師,都是使用C語(yǔ)言進(jìn)行程序開(kāi)發(fā),但linux可以分為linux驅(qū)動(dòng)開(kāi)發(fā)和linux應(yīng)用開(kāi)發(fā)。
linux開(kāi)發(fā)比STM32軟件開(kāi)發(fā)要復(fù)雜,從事linux開(kāi)發(fā),需要學(xué)習(xí)linxu gcc和shell指令,makefile編程,系統(tǒng)移植,文件系統(tǒng),linux驅(qū)動(dòng),QT等等相關(guān)知識(shí),門(mén)檻比stm32開(kāi)發(fā)難度高。需要掌握的知識(shí)點(diǎn)更多更復(fù)雜。學(xué)習(xí)難度非常大。
學(xué)習(xí)stm32的工程師,等到工作年限,一定會(huì)遇到職業(yè)瓶頸,這個(gè)時(shí)候,如果你會(huì)linux開(kāi)發(fā),操作系統(tǒng),那么職業(yè)道路將會(huì)走的很寬,二則,工作待遇來(lái)講,普遍linux開(kāi)發(fā)會(huì)比STM32開(kāi)發(fā)的福利待遇要好一些。
如果本身有一定的linux系統(tǒng)基礎(chǔ),那么強(qiáng)烈建議選擇linux,因?yàn)閘inux整體工資要比stm32開(kāi)發(fā)要高。學(xué)完linux后,如果項(xiàng)目需要stm32單片機(jī),那么再去做STM32,會(huì)覺(jué)得十分簡(jiǎn)單。
如果沒(méi)有任何的linux基礎(chǔ),公司沒(méi)有師傅帶著做linux的話(huà),或者公司對(duì)linux項(xiàng)目有較高的要求和時(shí)間限制,那么不建議轉(zhuǎn)linux,先將STM32學(xué)好,再過(guò)半年一年后,自學(xué)合作參加培訓(xùn)linux。不至于打擊學(xué)習(xí)的自信心,二則對(duì)于后續(xù)找工作也有一定的好處,至少有一項(xiàng)技能能夠在畢業(yè)后找到工作。
總之,因?yàn)樘幵诩磳厴I(yè)的時(shí)間點(diǎn),先要根據(jù)自身?xiàng)l件,結(jié)合自己的興趣愛(ài)好,保障畢業(yè)能夠找到好工作為前提
我是科技電小二,一名嵌入式開(kāi)發(fā)工程師,歡迎點(diǎn)個(gè)贊,并加個(gè)關(guān)注吧。
我覺(jué)得,剛出來(lái)實(shí)習(xí)的話(huà)最好就是能找到一個(gè)能讓你成長(zhǎng)的平臺(tái)。但前提是你現(xiàn)在所擁有的知識(shí)和技術(shù)是否能夠讓你所選擇的提供職位的公司能夠錄用你。
STM32與Linux兩者都是屬于嵌入式,而后者比前這更高級(jí),目標(biāo)可以訂在Linux,STM32只是一個(gè)過(guò)渡,兩者的相關(guān)理論都是有所系系,初始階段可以先通過(guò)STM32來(lái)搞明白常用的一些外設(shè),STM32搞明白了,自己的編程能力那也就提升了,再入手Linux也就簡(jiǎn)單多了,如果你一開(kāi)始就入手Linux的話(huà)估計(jì)會(huì)比較難而且復(fù)雜。
就我自己來(lái)說(shuō),剛實(shí)習(xí)的時(shí)候找了一份搞STM32的硬件開(kāi)發(fā)工程師的職位,這也是找了一個(gè)多月才找到的一份工作,這也是因?yàn)槲夷贸隽宋耶?huà)的不咋地的一份PCB設(shè)計(jì)才被錄用下來(lái)的。
錄用我的公司是一家小公司,一開(kāi)始就是做一些設(shè)備的組裝和畫(huà)一下PCB這些工作,因?yàn)槲业腃語(yǔ)言編程能力實(shí)在是太差了,在大學(xué)學(xué)的是8051的單片機(jī),而且學(xué)的也不怎么樣。所以看到STM32程序項(xiàng)目的程序那么多看明白的就沒(méi)幾行。后來(lái)我通過(guò)stn32開(kāi)發(fā)板提供的配套視頻教程了解了整個(gè)程序項(xiàng)目的結(jié)構(gòu)和作用后,就看得懂了,那時(shí)就可以改改程序了。后來(lái)來(lái)就不單單是搞硬件了,什么都要搞。最后公司所使用的產(chǎn)品性能要升級(jí),就用到了Linux,一開(kāi)始老板安排工作直接叫我在Linux上用qt開(kāi)發(fā)一個(gè)軟件,當(dāng)時(shí)我就愣了一下,因?yàn)槲叶紱](méi)搞過(guò)C++。而且還說(shuō)沒(méi)完成要追究責(zé)任。沒(méi)辦法只能硬著頭皮開(kāi)干了。用了兩天去了解QT項(xiàng)目工程的結(jié)構(gòu)。最后搞了兩個(gè)多月算是完成了,過(guò)程中搞過(guò)Linux內(nèi)核編譯,底層驅(qū)動(dòng)移植,驅(qū)動(dòng)添加等等,感覺(jué)在這段時(shí)間學(xué)到了很多。
所以說(shuō)STM32到Linux只是一個(gè)過(guò)程,是一個(gè)由淺入深的過(guò)程。如何抉擇先看你自己現(xiàn)在能力在那個(gè)階段。
都要會(huì),實(shí)際上區(qū)別不是太大的,都能用C。實(shí)際上用系統(tǒng)會(huì)簡(jiǎn)單點(diǎn),但在對(duì)單片機(jī)性能要求高,主頻至少幾百兆,裸機(jī)只要幾十兆就夠了
學(xué)stm32,后期可以打工,也可以創(chuàng)業(yè)。學(xué)linux,后期以打工為主。如果只要打工,相對(duì)來(lái)說(shuō)后者工資較高點(diǎn),但不絕對(duì)。
天下代碼不分家. 如果基于Linux 系統(tǒng)工作環(huán)境,命令行+M0-M3單片機(jī)手冊(cè),基于OpenOCD裸機(jī)開(kāi)發(fā)M0/3程序,寫(xiě)驅(qū)動(dòng)代碼和GCC makefile,寫(xiě)匯編啟動(dòng)代碼,手動(dòng)編寫(xiě)GCC鏈接符號(hào)表,生成ELF文件刷Flash, 如果能玩任意一款哪怕Openocd不支持的M0/4單片機(jī),基本上Linux和STM之流都可以入門(mén)了... 有人說(shuō)Linux比單片機(jī)復(fù)雜,宏觀(guān)看是對(duì)的,但是拿到一款openocd不支持的單片機(jī)直接愣逼,如果真正掌握l(shuí)inux, 開(kāi)發(fā)單片機(jī)完全可以?huà)仐塛indows MDK和IAR開(kāi)發(fā)環(huán)境,如果不行,說(shuō)明Linux學(xué)了皮毛
嵌入式軟件開(kāi)發(fā)領(lǐng)域,主要分為MCU開(kāi)發(fā)和SOC開(kāi)發(fā)兩個(gè)大類(lèi)別。具體的細(xì)分情況如下圖所示。其中,MCU開(kāi)發(fā)主要涉及到一般的RTOS系統(tǒng)開(kāi)發(fā),而SOC開(kāi)發(fā)就具體需要Linux操作系統(tǒng)的支持了。
嵌入式軟件開(kāi)發(fā)崗位分類(lèi)
題主上面問(wèn)題中,STM32屬于MCU開(kāi)發(fā)的范疇,而嵌入式Linux 開(kāi)發(fā)是屬于SOC開(kāi)發(fā)的范疇。兩個(gè)領(lǐng)域來(lái)說(shuō),編程語(yǔ)言都是標(biāo)準(zhǔn)的C語(yǔ)言;MCU與SOC芯片硬件差異有,但是不是影響開(kāi)發(fā)的因素。兩者主要的區(qū)別在于:Linux操作系統(tǒng)遠(yuǎn)遠(yuǎn)復(fù)雜于STM32上常見(jiàn)的RTOS操作系統(tǒng)。而且,在Linux 開(kāi)發(fā)領(lǐng)域,還更加細(xì)分為應(yīng)用開(kāi)發(fā)與BSP驅(qū)動(dòng)開(kāi)發(fā)兩個(gè)子類(lèi)別。
所以說(shuō),Linux開(kāi)發(fā)的復(fù)雜度遠(yuǎn)遠(yuǎn)高于STM32上RTOS的軟件開(kāi)發(fā)。至于如何選擇,需要題主根據(jù)自身的技術(shù)能力(是否有Linux的開(kāi)發(fā)經(jīng)驗(yàn)),參考個(gè)人的技術(shù)發(fā)展方向(未來(lái)從事MCU還是SOC),具體問(wèn)題具體分析來(lái)決定。
根據(jù)答主的嵌入式開(kāi)發(fā)經(jīng)歷,如果題主對(duì)Linux操作系統(tǒng)沒(méi)有開(kāi)發(fā)經(jīng)歷。建議您選擇從STM32的RTOS系統(tǒng)開(kāi)發(fā)做起,然后擴(kuò)展到嵌入式Linux的應(yīng)用開(kāi)發(fā),最后在涉足Linux的BSP開(kāi)發(fā)的技術(shù)發(fā)展道路。這個(gè)也是答主,以及很多朋友的常見(jiàn)技術(shù)發(fā)展道路。
以上僅代表個(gè)人建議,僅供題主參考。
都可以學(xué),學(xué)到夠用就行,不用太專(zhuān),后期關(guān)鍵還是要對(duì)一個(gè)行業(yè)技術(shù)理論以及難點(diǎn)突破點(diǎn)的深度挖掘與突破,然后在這些平臺(tái)上實(shí)現(xiàn)功能需求。stm32和linux只是一個(gè)平臺(tái)工具而已,有人用來(lái)點(diǎn)燈,有人用來(lái)搞人工智能,這就是區(qū)別,雖然大家都會(huì)這兩個(gè)平臺(tái)!
Stm32要會(huì)看電路圖,有可能要畫(huà)板子,要熟悉各種硬件外設(shè)和軟件庫(kù),linux的話(huà)注重軟件開(kāi)發(fā),跟windows開(kāi)發(fā)一個(gè)套路,如果想了解硬件,那就stm32,否則就干linux
STM32更貼近底層硬件,重點(diǎn)在底層設(shè)備和器件;Linux更貼近應(yīng)用層,重點(diǎn)在驅(qū)動(dòng)和應(yīng)用
前者開(kāi)發(fā)所需要的知識(shí)偏散偏底層,要做好需要沉下心來(lái)積累幾年才行,要求經(jīng)驗(yàn); 后者開(kāi)發(fā)所需的知識(shí)面很廣,好在與互聯(lián)網(wǎng)或普通計(jì)算機(jī)所需的知識(shí)高度復(fù)合,因此上手快。
在工作的前期,linux開(kāi)發(fā)待遇高,后期STM32所代表的高級(jí)硬件開(kāi)發(fā)待遇高,且可遇不可求。
以上
這里不針對(duì)樓主所謂哪個(gè)平臺(tái),只是想提醒一下在讀書(shū)的同學(xué)。實(shí)際上一個(gè)工程人員的核心競(jìng)爭(zhēng)力難度不在于平臺(tái),在于基礎(chǔ)知識(shí)積累。通信原理,數(shù)字信號(hào)處理,微機(jī)原理,英語(yǔ)好,理解能力強(qiáng)也是很重要的。
弄Linux大部分功能都是現(xiàn)成的,原廠(chǎng)提供了bsp在上面改就行了。要增加一些什么功能,有非常多的開(kāi)源代碼直接換個(gè)交叉編譯工具就可以移植了。linux只有個(gè)芯片手冊(cè)就能把系統(tǒng)搭建起來(lái)的恐怕鳳毛麟角了。不過(guò)linux就業(yè)機(jī)會(huì)確實(shí)比單片機(jī)多點(diǎn),我從事單片機(jī)開(kāi)發(fā),這點(diǎn)有體會(huì)。另外就是單片機(jī),這是完全可以靠gcc和makefile搞起來(lái)的。但一般都用原廠(chǎng)的sdk,沒(méi)必要自己搞。
說(shuō)了這么多,想表達(dá)的意思是平臺(tái)不是問(wèn)題,入門(mén)成本不高。當(dāng)然,硬是要搞得非常徹底,那還是算了吧,估計(jì)一般人早晚都會(huì)放棄。站在巨人肩膀上做事才會(huì)更好。
真正的牛人不是用哪個(gè)平臺(tái),而是基礎(chǔ)知識(shí)積累怎樣。舉個(gè)例子,移植驅(qū)動(dòng)寫(xiě)makefile好像逼格很高吧?但一般人依樣畫(huà)葫蘆一樣可以搞定。但是,牽涉到基礎(chǔ)理論的代碼,別說(shuō)寫(xiě)了,一般人看都看不懂,函數(shù)在那里都不知道怎么用。不相信的同學(xué)可以隨便去看看各種解壓縮算法,各種通信協(xié)議。另外想表述到是英語(yǔ)跟重要,因?yàn)?9%的有價(jià)值的文檔都是英文的。舉個(gè)例子,各種標(biāo)準(zhǔn)化組織的spec都是英文的,沒(méi)人給你翻譯中文。國(guó)內(nèi)的論壇,大部分情況下問(wèn)題解決了不會(huì)說(shuō)解決方法,國(guó)外的就不一樣了,大部分情況下解決了會(huì)詳細(xì)解決方法描述。不相信的同學(xué)等你們工作了就會(huì)有感觸。
因此,讀書(shū)的時(shí)候積累好基礎(chǔ)知識(shí),哪個(gè)平臺(tái)是基本技能,花一年左右時(shí)間補(bǔ)短就好了。以后的工作中,基礎(chǔ)知識(shí)扎實(shí)的同學(xué)肯定能脫穎而出。這也是為什么牛逼企業(yè)招985的多一些。哪個(gè)平臺(tái)寫(xiě)代碼是大磚小磚的區(qū)別,而基礎(chǔ)理論知識(shí)才是設(shè)計(jì)圖紙。
0
回答0
回答5
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答