博客專欄

        EEPW首頁 > 博客 > 嵌入式真的沒前途嗎?

        嵌入式真的沒前途嗎?

        發布人:xiaomaidashu 時間:2022-06-22 來源:工程師 發布文章

        大家好,我是小麥。

        從事嵌入式相關行業,差不多快有10年時間了,走過很多彎路,踩過很多坑。

        很多人會問,嵌入式真的沒有前途嗎?這個我其實也無法回答。用發展的眼光來看,萬物都有周期。

        這個和嵌入式無關,和行業有關,一個行業的增長有關,和資本有關,和郭嘉發展有關。所以只有天時地利人和,而這個人和,就是你自己的選擇。

        對此這是我的看法,也歡迎大家發表自己的看法。

        如果打算入門嵌入式學習,那就和大家聊聊嵌入式學習路線。

        什么是嵌入式?

        嵌入式即嵌入式系統,IEEE(美國電氣和電子工程師協會)對其定義是用于控制、監視或者輔助操作機器和設備的裝置,是一種專用的計算機系統。

        國內普遍認同的嵌入式系統定義是以應用為中心,以計算機技術為基礎,軟硬件可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗等嚴格要求的專用計算機系統。

        嵌入式是一個比較多學科綜合的方向,有很多細分的方向。其實可以直接切入某個細分的領域,然后介紹一下學習路線,比如單片機開發,Linux應用開發,Linux驅動開發。

        但是不難發現,雖然是很多細分,但是需要學習的知識有所交叉,有的又相互獨立。


        嵌入式的相****聘崗位,基礎技能樹要求其實相差不大,不過有很多對行業綁定比較深的崗位,會要求有行業經驗和這個行業沉淀的相關技能;

        • 比如汽車電子要求can,autosar;
        • 物聯網要求網絡協議,單片機,RTOS,WiFi,Bluetooth等等;
        • BSP工程師要求掌握Linux內核和各種子系統;
        • 機器人相關要求掌握ROS;

        崗位還有很多,這里就不過多列舉了,下面分享一下我認為的比較萬金油的學習路線。

        下面是我整理的思維導圖。簡單來說一下傳統的學習路線。

        圖片

        編程基礎

        圖片

        C語言

        這是必須要精通的。C語言非常靈活,可以進行單片機開發,驅動開發,固件開發,內核開發,應用開發,幾乎都可以用到。

        比如著名的操作系統Linux,主要就是C語言實現的,當然還有很多基于C語言的項目,這里就不一一介紹了。

        學習C語言,我比較喜歡浙大翁愷老師的課程。

        C++

        C++在嵌入式中更多是應用開發方向,因為對C有較好的兼容,所以在硬件方面仍然使用C進行編程,而較為復雜的業務邏輯部分,則使用面向對象的C++進行封裝和實現。

        C++和C的混編也是非常實用的。

        數據結構與算法

        合理地使用數據結構,它會讓的開發事半功倍,常用的數據結構,比如隊列,鏈表其實在嵌入式的開發中十分常見,當然還有hashmap,二叉樹等等。

        如果編程語言是武器,那么數據結構就是招式。什么樣的場景,使用什么樣的招式,數據結構里大致都寫了。

        其他編程語言

        還有很多其他的編程語言,我這里列舉幾個。

        shell

        這是腳本語言,在Linux上比較常見,一般來說,掌握shell,可以大大提高工作效率,這個是強烈建議熟練掌握的,遇到不懂的可以多看man page;

        python

        很方便,大大提高效率。用于驗證一些算法功能,或者辦公自動化。

        硬件知識

        這里的硬件知識并不是對于做純硬件開發的路線,而是做嵌入式軟件開發,需要掌握哪些硬件知識,下面詳細來說一說;

        圖片

        硬件基礎

        具備最基礎的硬件知識素養,如果是做驅動的開發,比如BSP工程師,必須具備最關鍵的兩點,可以看懂芯片的Datasheet,可以看懂原理圖,因為要做板機的開發。

        常見的通訊協議

        比如UART,I2C,SPI協議等等,這三個比較常見,也相對比較簡單。其他還有很多通信協議,這里就不再介紹了。

        常見的片上外設

        比如gpio,adc,dac,watchdog,timer,pwm這些,原理都是一樣的,但是一般的SOC基本也都是類似的外設。

        常見工具的使用

        示波器,萬用表,電源的使用,至少不能經常把正負極接錯。示波器便于用來查看時序,開發的時候方便排查問題。

        嵌入式系統

        嵌入式操作系統的話,通常看具體的需求進行劃分,常用的實時系統有ucos,freertos,rtthread,vxworks等等,而Linux系統也十分常用;

        實時系統

        通常來說,實時系統大多用于用于控制的場合,比如ucos,freertos,rtthread,vxworks等等,都是實時系統。

        Linux系統

        Linux系統應用比較廣泛,智能硬件,監控設備,路由器,手機,汽車等等,都有它的身影。大致方向主要分為Linux驅動和Linux應用,兩者的界限已經模糊不清。技術架構上分為用戶空間和內核空間,如下圖所示;

        圖片Linux

        應用

        如果是應用開發,其實和純軟件開發差不多了。

        基礎內容,其實前面也有一部分提及,Linux系統編程,多線程,操作系統層面的基本知識,互斥,信號量,網絡編程等等。

        具體應用,比如音視頻的開發,運動控制,機器人開發等等;

        推薦看《Unix環境高級編程》,這是基礎。

        驅動

        對于底層知識的掌握要求比較高,至少板機Linux的編譯,剪裁,移植等內容。

        可以根據具體硬件需求,添加相應的驅動到系統中,因為系統已經規定好相應的驅動框架,因此需要了解各種內核子系統和各種類型的驅動。比如字符設備驅動,塊設備驅動,設備樹的使用等等。

        深入學習子系統也是一個難點,可以幫忙更好地了解Linux,例如進程調度(SCHED)、內存管理(MM)、虛擬文件系統(VFS)、網絡接口(NET)和進程間通信(IPC)。

        比較推薦的學習資源,宋寶華老師的Linux內核4.0驅動書籍,韋東山老師的驅動視頻,互聯網時代,搜一下就有了。

        總之,技術在于積累。

        其他

        上面說了這么多,如果要保持技術的精進,需要保證持續學習,多看優秀的源代碼,找優秀的開源項目。

        非常規學習路線

        在掌握部分基礎知識之后,也可以嘗試這種學習路線,按照項目的形式進行學習。

        定一個目標項目,例如;

        • 在Linux系統上實現一個程序,如果非得和硬件沾邊,比如做一個人臉識別的門禁系統;

        • 比如要在一個板子上移植Linux系統,并添加驅動;

        • 用單片機開發一個小項目,完成軟硬件的設計;

        以上完全是三個不同的方向了,因為每個人的具體情況都不相同,可以根據自己的技術棧和興趣愛好來做,想不到做什么的,找一些開源的項目,自己復刻一下,也是很好的。

        有了目標之后,將任務拆解,這中間會遇到很多知識盲區,會用到上面我提到過的很多知識,這時候你就要去學習,去吸收,帶著目的去學習和實踐,效果反而會更好。

        總結

        這篇文章總體上介紹了嵌入式的學習路線,相對寬泛和簡略,由于嵌入式的知識體系確實很龐大,單純從個人角度去寫,還有很多片面和局限的地方。

        希望對一些想要加入這個方向的同學有所幫助,如果本文存在錯誤或者需要改進的地方,歡迎您的建議。


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)
        攝像頭相關文章:攝像頭原理


        關鍵詞: 嵌入式

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 松溪县| 古丈县| 峨山| 揭西县| 九台市| 泽库县| 五大连池市| 元阳县| 崇礼县| 伊金霍洛旗| 朔州市| 东港市| 文化| 乐清市| 十堰市| 上林县| 衡阳县| 宁陵县| 陈巴尔虎旗| 开化县| 和林格尔县| 时尚| 云龙县| 塔河县| 沙雅县| 古丈县| 睢宁县| 唐海县| 华阴市| 湖口县| 都江堰市| 横峰县| 苗栗县| 昌邑市| 重庆市| 民权县| 武陟县| 土默特右旗| 镇安县| 斗六市| 永登县|