大學時候學的電子信息工程,畢業後通過關係進入到本行業的一家公司,做硬件開發。我剛進公司啥都不懂,簡單的上拉下拉電阻不知道什麼意思,三極管更不懂得開關座用啥的,我記得我們領導當時說過一句話:你是我見過做研發基礎最差的。

在後邊的四年我一直在這家公司工作,慢慢的也適應了工作,不得不說,剛畢業的學生確實勁頭十足,我也得感謝自己那時候的努力和付出,慢慢的基本上對硬件開發也都熟悉了,自己也可以獨立設計電路,獨立做個MCU系統,獨立畫板等。

所以我想說,對電子行業有興趣的各位,不要害怕基礎差,只要你開始這份工作後,有一顆肯學習的心,慢慢的一切你都會熟悉和上手。

去大公司?還是去小公司?

我是從去年9月份辭職,然後到了一個相對陌生的城市發展,說實話,是因爲我對象喜歡這個城市,也就來了。一開始辭職時候找了一家物聯網公司,因爲沒深入瞭解,導致了幹了一個月之後就辭職了,那次辭職是裸辭,辭職後的壓力很大,不斷的找工作,發現真正適合的工作只能是本行業的工作。

其實從2014年年初我就有點厭倦硬件開發的工作了,後來迫於生活壓力,又快過年了,原來城市的一家世界500強的公司錄用了我,我就暫時又回到原來城市工作,與對象暫時分居兩地。進了500強的大公司,確實感覺到與小公司不一樣,但是說句實話大公司裏面的人際關係太複雜了,複雜的超出了我的想象程度。

一個完全不懂研發的人管理研發,不懂電路的人做電路設計,剛畢業的人沒接觸過DSP寫出來的程序就敢用來做小批量,唉,不說了。

今年三月還是由於感覺跟對象在不同城市又辭職回來了,不過也錯失了一個能在大公司往上爬的機會,那時候基本在大公司轉正就可以自己負責電路開發這塊(其它人都不懂),不過也不後悔,看看他們那邊的小高層,全都是心眼啊。

辭職後又開始新的找工作歷程,大約一個月後找到了現在的工作,裸辭找工作就像剩女找對象,會慢慢慢慢的放低自己的要求,後來就來到了現在的公司。公司研發人員有10多個,但是上位機的太多,做MCU和產品硬件的這邊一共5個人。

現在的感覺就是公司管理特別混亂,沒有一套完整的產品研發-生產體系,研發出來的新產品出貨速度太快,導致後期維護量巨大,生產也是一塌糊塗,一個集中器生產100臺,至少有40臺以上會有毛病,剛纔領導又來催時間了,研發這邊的領導也是個逗比,就知道催催催,也不看具體工作數量和質量。

文件管理混亂不堪啊,真心的,領導哪天想起來了就讓你出個這文件,哪天又讓你出個那文件,真心煩。

在這一行乾的越久就會越明白,這行想繼續做下去,要麼自己有好的項目自己幹,要麼有興趣,要麼遇上一個讓你想跟隨的好領導。

對於選擇工作上,個人感覺畢業後有機會進大公司一定要進大公司,一個系統的公司可以給你一個系統的培訓,讓你有個整體的工作思路,小公司當然有小公司的好,什麼雜活都幹,學的東西必然多,但絕對不利於個人的長期發展。

軟硬兼修,後顧無憂

嵌入式軟件編程顯然不同於PC軟件開發,它和硬件密切相關。想寫好嵌入式軟件代碼,就必須瞭解清楚所使用MCU的硬件特性、各個外圍電路和接口電路的原理。不僅要深挖細究MCU內核架構的知識,是否支持浮點處理器/DSP,是否支持協處理器、指令數據緩存。

還要了解MCU的編程模型、各種存儲器的地址空間分配及其訪問效率如何,在MCU之外,還必須瞭解各種電路知識,什麼地方需要上下拉,什麼地方需要加濾波電路,什麼地方必須隔離,哪裏必須加抑制器件,等等不一而足。

爲什麼需要了解到這種程度呢?

1.軟硬結合,更好地實現用戶需求。比如輸入捕捉,如果是通過上升沿或者下降沿捕捉,加了不合適的濾波電容會造成對沿的破壞,不加濾波電容就會受困於各種空間干擾產生的雜波。

倘若硬件工程師搬來的是加了不合適電容的電路,搞得沿之間位寬失真,便會出現數據不正常的偶發故障,倘若硬件工程師搬來的是不加電容的電路,搞得軟件工程師必須進行軟件濾波,把代碼搞得又複雜又難解,你說這怨誰來着?

2.方便定位Bug。愛因斯坦曾經說過,“提出一個問題往往比解決一個問題更重要,因爲解決一個問題也許僅是一個數學上的或試驗上的技能而已,而提出新的問題、新的可能性、從新的角度去看舊的問題需要有創造性的想象力,而且標誌着科學的真正進步。”

鑽研硬件電路可以幫助軟件工程師提出更多解決問題的思路,發現導致Bug的更多可能性。一般來說,當遇到Bug時,對硬件一知半解的軟件工程師只在代碼層面上打轉轉,基本不會在硬件方面提出問題,最終爲了迎合蹩腳的硬件設計出彆扭無比的代碼,卻不曾想,只要稍稍改變一下硬件設計,就可以輕鬆且優雅地完成代碼設計。

3.藝多不壓身,求人不如求己。當我們對硬件電路設計起了懷疑,倘若自己悄沒聲地拿起烙鐵飛個線、換個元件,驗證了自己的思路,這時直起腰版、拿着板子理直氣壯地去找硬件工程師,豈不是順順利利,又送順水人情?

倘若直接拿着板子,心底發虛面上露怯地去找硬件工程師理論,一場脣槍舌戰在所難免,腥風血雨不說,到頭來硬件工程師硬着頭皮給你調調電路,真是解決了問題還好說,若是自己思路錯了,那不是自找苦喫?上個班,掙點錢養家餬口而已,當個老好人,和同事其樂融融多好,吵來吵去,搞得那麼辛苦,何必來着?

對於嵌入式學習者來說,我們該學習什麼,或者說如何學習?才能提高自己的職場競爭力,或者說對於一個新手來說,如何通過自學,達到公司的用人標準和技術要求,找到一份自己想要的工作?

首先,你要學會做減法,從現實出發,要有這樣一個意識:我不可能精通所有的嵌入式技術,學會堅持,制定合理現實的小目標。很多人喜歡那種不切實際的廣告轟炸營銷,擊中你心理上的某個軟肋,某個G點,一下子興奮起來。越熬越濃的心靈雞湯,並不能解決我們喫飯的生存現實問題。

很多人,包括我,在學習的時候,都喜歡給自己樹立各種路線、計劃、日程表。制定計劃時激情滿滿,熱情高漲,激動得睡不着覺。計劃宏偉而飽滿,彷彿成功就在眼前。但是往往不切實際,往往在早期,遇到各種困難,各種坑,各種拖延導致沒有堅持下來,最後夭折。

然後接着制定下一個宏偉的計劃,繼續夭折,生活週而復始,day after day。觀察我們生活周圍,真正做出成績的都是那些基於現實出發,能一路堅持下來的人,day by day。有時候你會發現,並不覺得他們有多聰明。

其次,保持自己的興趣,說白了就是爲了堅持下去。見過很多人想學習嵌入式,花了很多米買一塊開發板,激情滿滿,過一段是過去再看,已經不折騰了。

嵌入式開發難,難在哪裏呢?主要在於開發環境的搭建,軟件調試上,不像在Windows上使用VC開發程序,集成開發環境都幫你弄好了,各種斷點、單步、查看堆棧、寄存器、內存窗口。而嵌入式不一樣,硬件環境搭建會遇到各種各樣的問題,各種電腦的兼容問題,各種莫名其妙的問題,有時候着實讓人抓狂,時間久了,慢慢地學習的激情殆盡,也就不想學習了。這還不算什麼,更嚴重的是,很多人學習嵌入式遇到挫折,往往會打擊人的自信,覺得自己能力不行,智商不夠,不適合幹這行,在心理留下了陰影。

對於個人學習者來說,買了開發板,你不買配套的萬用表、示波器等調試設備,遇到硬件問題也是一籌莫展,無法解決。其實我們可以完全使用其它的平臺去開展我們的研究和學習,比如QEMU,一款可以仿真開發板的開源軟件,使用這款開源軟件,我們可以在電腦上虛擬一個世面上流行的開發板,然後再在這個仿真的開發板上跑u-boot、Linux內核、掛載根文件系統,使用和開發板一樣的源碼,運行效果和真實的開發板是一樣的。

而且,使用QEMU的好處就是,“硬件”永遠不會出問題,可以讓我們避過硬件的各種坑,騰出更多的精力去研究嵌入式軟件的各種架構、編程技能、內核驅動....,這些纔是嵌入式工程師的核心競爭力,需要花大量的時間不斷地去積累,去磨合,去提高的。

把大量的時間耗在一個本該不屬於學習範疇的硬件bug上或者硬件環境不兼容上,不划算,因爲你以後進公司後,遇到同樣的問題,找硬件工程師,半分鐘幫你搞定。所以說,選擇一個理想的嵌入式學習平臺,尤其對於初學者來說,很重要。

最後,要保持學習的深度,刻意練習。不要讓自己永遠待在學習的舒適區,要學會挑戰自己,不斷去擴展自己知識的邊界,完善自己的知識體系和技能。

很多人買了開飯,按照教程,“移植”了u-boot,Linux內核,製作了根文件系統,然後就陷入了迷茫:接着要幹什麼?要學習什麼?想學習又感覺深入不下去,東一耙子,西一耙子,看看這,看看那,時間不知不覺就過去了。

其實,學習嵌入式,基本的嵌入式知識和理論學習還是必要的,很多人推崇邊做邊學,到項目中學習,實踐出真知。當然這也是一個方法,但是也有弊端,那就是學習的不繫統,很多有心人到後來還是得回來補課,完善自己的知識體系和技能。

很多人玩開發板,燒寫鏡像,玩得賊溜,但是你知道這裏面的原理嗎?知道JTAG怎麼下載的嗎?Jlink和JTAG有什麼區別?爲什麼PC上要裝個JTAG軟件而Jlink不用?程序的編譯和鏈接是怎麼樣的?爲什麼內核鏡像要下載內存的某個地址?換個地址行不行?爲什麼我們編寫的程序要在有OS的環境下運行,在ARM開發板裸機環境下,你能寫一個跑起來的程序嗎?只有對這些問題深入思考,你纔會對嵌入式有一個更深的認識,超越了平臺,一通百通。

以上圖文來自電子工程專輯,如侵權,聯繫小編刪除。

相關文章