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