大家好,我是雜燴君。
一位朋友問了這樣一個問題:
嵌入式技術的范疇很廣,不同地行業(yè)可能涉及到不同地技術。如:
機器人行業(yè)應用的相關技術可能有:傳感器數(shù)據(jù)采集處理、電機控制、ROS機器人操作系統(tǒng)、規(guī)劃與運動控制、WiFi藍牙等無線通信、圖像識別、語音識別等。
智能家居行業(yè)應用的相關技術可能有:WiFi藍牙等無線通信、MQTT等物聯(lián)網(wǎng)相關協(xié)議、物聯(lián)網(wǎng)操作系統(tǒng)、物聯(lián)網(wǎng)安全、傳感器數(shù)據(jù)采集處理、物聯(lián)網(wǎng)云平臺等。
汽車電子行業(yè)設計的相關技術可能有:傳感器數(shù)據(jù)采集處理、物聯(lián)網(wǎng)通信技術、語音識別、電機控制、BMS電池管理、總線通信協(xié)議等。
不同的嵌入式產(chǎn)品,需要的技術不全一樣。但所需的基礎技術都是差不多的。
每項技術可能有著相應的開發(fā)崗位,這些崗位實際可能不全叫嵌入式軟件崗,但這些崗位大多都是嵌入式軟件工程師 + 特定知識的學習之后就可以勝任。如:
嵌入式軟件基礎 + 電控知識 = 電控軟件開發(fā)工程師
嵌入式軟件基礎 + AI技術 = 嵌入式 AI 應用開發(fā)工程師
嵌入式軟件基礎 + 音視頻技術 = 嵌入式音視頻開發(fā)工程師
嵌入式軟件基礎 + 底層知識 = 嵌入式驅動開發(fā)工程師
學嵌入式要學到什么程度才好找工作呢?
我認為是這些點:
編程語言
基本掌握嵌入式必備的編程語言。C語言為主,C++為輔。在資源有限的情況下,大多數(shù)嵌入式產(chǎn)品還是使用C語言為主的,特別是底層驅動開發(fā)。上層應用開發(fā)大多用C,在一些資源比較充足的平臺中,也會選擇使用C++來進行開發(fā)。
補充編程語言的知識時,除了掌握語言本身的知識之外。還需要同時學習:編譯、構建、調試等方面的相關知識。這類很重要的知識一般C語言課程都沒教:
芯片
基本掌握嵌入式處理器的基礎知識。嵌入式處理器種類很多:MCU(微控制器)、MPU(微處理器)、DSP(數(shù)字信號處理器)等。MCU,也就是我們常說的單片機。
初學期,重點放在單片機的學習這一塊。
理解整體框圖、掌握基礎外設如:GPIO、UART、TIM、ADC、DAC、I2C、SPI的裸機編程及相關原理、應用。
操作系統(tǒng)
基本掌握操作系統(tǒng)相關知識。
先了解學習RTOS,如RT-Thread等。學習操作系統(tǒng)內核知識:線程調度、時鐘管理、線程間同步、線程間通信、內存管理、設備管理等,并掌握基本的使用。
再熟悉Linux操作系統(tǒng)的基本使用。
再學習Linux下的應用開發(fā)知識:多線程編程、多進程編程、文件I/O編程、網(wǎng)絡編程等。
開發(fā)工具
基本掌握必備的開發(fā)工具。
VScode、VS、Sourceinsight、Vim的使用。
gcc、gdb的使用。
git的使用。
對比工具、串口工具、網(wǎng)絡工具的使用。
解決問題的能力
上面幾點都可以通過一些技術資料進行學習。這一點則需要需要在實戰(zhàn)中鍛煉,比如自己找一些小項目來做,一來可以把上面列出的幾點內容給完整地串起來,二是在做項目的過程中會遇到很多問題,通過不斷解決這些實際問題可以積累一些解決問題的經(jīng)驗。
工作之后,知識儲備該有的都有了,大家最后拼的也都是解決問題的經(jīng)驗、能力。
我覺得牢牢地掌握這些99.99999%的概率都會用得上的嵌入式軟件基礎對找工作才比較有利。其它一些技術可以再用的時候再去了解、學習。
特別是一些行業(yè)相關知識,可以入行之后再進行學習。如果你一開始的目標就很明確,要在某一行、某一個方向進行深耕,也可以提早學習相關知識,早些積累一些優(yōu)勢。