嵌入式開發入門指引,你學到了嗎?
1、入門
C語言:嵌入式編程大多用C語言,少量匯編,C語言必須熟練掌握。
電路:基本的模擬電路、數字電路知識,能大概明白電路原理圖;掌握從原理圖到PCB板的技能或常識;會焊接、調試,使用常用儀表。
51單片機:雖然落后,但學習相對簡單,IO、中斷、定時器,AD、Flash、UART、IIC等基礎;輔以簡單的開發板練習,鞏固基礎、原理。
C51基礎,會看datasheet,使用官方庫或寄存器設置,能實現中等難度的裸機程序;達到這個能力,后續換其它型號也容易舉一反三,快速掌握。
2、進階
ARM單片機:8位單片機是基礎,升級32位ARM是階段目標,一般選STM32,資料豐富?;谠瓘S庫函數實現復雜功能,對接外設,如藍牙模塊、GPS模塊等,數據采集過濾、存儲、傳輸等。理論方面比如編譯、鏈接、OTA、socket等也需要明白。
實時操作系統:裸機開發是基礎,要提高必須跑系統,如freerRTOS 、rt-thread等。學會移植,使用系統接口開發復雜功能,盡量研究下RTOS的源碼,其數據結構、編碼規范是學習的參考資料。注意軟件分層與模塊化思想。
應用層:掌握一定的C++或QT基礎,開發一些輔助工具,也可快速驗證純軟件邏輯,見識面向對象開發的思維。其它語言如perl、shell、python、批處理都可以學個基礎,能一邊百度一邊寫出就行。
正式項目一般基于原廠SDK開發,非通用芯片使用特有的開發環境、調試工具等,有了前面基礎,新平臺1-3周足以應付。做項目和學習的專注點不同,要求的是穩定、性價比,不追求技術的先進性。
學習中總結失敗教訓,梳理開發流程、技巧,整理成技術文檔,加深理解,這些文檔不僅對自己,對其他人也是財富。
3、規劃
具備一定基礎了,后續發展看個人愛好或市場需求,軟件或硬件或全棧,相比來說嵌入式軟件需求大。其下細分單片機開發支持RTOS實時系統或者Linux,前者容易,后者需求大,但入門難,即使精通一個組件或方向也能發展不錯。Linux路線,先學會應用開發,再驅動,最后深入內核。
基本上規劃大概率決定了職業方向,盡早規劃,提前準備,有針對性的學習RTOS或者Linux或者硬件電路,后續往深度發展。如果不適合技術路線,有點基礎再從事市場營銷也大有裨益。
除技術之外,嵌入式開發對行業經驗也有一定要求,不同行業應用的技術側重點不同,可以參考相關公司的招聘要求,有針對性的去了解。
選擇比努力重要,同樣是軟件開發,不同行業也存在較大區別。第一份工作盡量選個好方向、挑大公司,有這些起點背景,后續發展會更好;最開始的方向和平臺沒選對,后面再折騰會走很多彎路,也許一生的職業發展就在錯誤的路上,再努力也很難達到一定高度。
4、發展
“三人行,必有我師焉;擇其善者而從之,其不善者而改之”,不論哪種職業,要善于總結、學習周圍人的長處,比如軟件開發,閱讀優秀開源代碼是快速提高軟件開發水平的主要途徑。
持續學習,從深度與廣度發展,總結分享技術成果。如果感到沒有參考目標了,說明已經成為一方權威或者該換地方了。
5、個人感想
以前有個困惑,有的老年人做飯一輩子,可是燒菜的水平還是有限;一些烹飪技校的學徒,幾年時間后做出的飯菜明顯高于一般家庭主婦。這個問題,也許答案是持續學習、不斷進步。社會在進步,技術在更新,不斷接觸新的,不一定都要親自動手實踐,能評估可行性,知道大概如何實現即可,有需求時再深入細節。
嵌入式系統開發方向繁多,只要肯專研,精通一門,成為食物鏈頂端的人,人生軌跡都不會差。
嵌入式軟件開發,C語言是基礎;有需要請添加個人微信,微信號隱藏在C代碼中:
- //個人微信號
- #define UNKNOWN ('-'-'-')
- #define C(c) #c[0]+23
- #define CC "%"
- #define CCC CC"c"CC"c"
- #define CCCC(c) ??=c"02"
- int main()
- {
- int a=100;
- char error = 0xFF;
- char work = "RTOS"['/'/'/']/2021;
- printf("c"CCC"n"CCC"%c%"CCCC(c)"%c"CCC"\012",
- work["mtk"]-5,work["embedded-system"],work["gps"],\
- UNKNOWN["java"],UNKNOWN+3["linux"],(-~UNKNOWN)["Android"],\
- C(c),UNKNOWN??("my_wechat"??),"number here"??(2??)+error);
- return 0;
- }