大家好,我是杂烩君。
一位朋友问了这样一个问题:
嵌入式技术的范畴很广,不同地行业可能涉及到不同地技术。如:
机器人行业应用的相关技术可能有:传感器数据采集处理、电机控制、ROS机器人操作系统、规划与运动控制、WiFi蓝牙等无线通信、图像识别、语音识别等。
智能家居行业应用的相关技术可能有:WiFi蓝牙等无线通信、MQTT等物联网相关协议、物联网操作系统、物联网安全、传感器数据采集处理、物联网云平台等。
汽车电子行业设计的相关技术可能有:传感器数据采集处理、物联网通信技术、语音识别、电机控制、BMS电池管理、总线通信协议等。
不同的嵌入式产品,需要的技术不全一样。但所需的基础技术都是差不多的。
每项技术可能有着相应的开发岗位,这些岗位实际可能不全叫嵌入式软件岗,但这些岗位大多都是嵌入式软件工程师 + 特定知识的学习之后就可以胜任。如:
嵌入式软件基础 + 电控知识 = 电控软件开发工程师
嵌入式软件基础 + AI技术 = 嵌入式 AI 应用开发工程师
嵌入式软件基础 + 音视频技术 = 嵌入式音视频开发工程师
嵌入式软件基础 + 底层知识 = 嵌入式驱动开发工程师
学嵌入式要学到什么程度才好找工作呢?
我认为是这些点:
编程语言
基本掌握嵌入式必备的编程语言。C语言为主,C++为辅。在资源有限的情况下,大多数嵌入式产品还是使用C语言为主的,特别是底层驱动开发。上层应用开发大多用C,在一些资源比较充足的平台中,也会选择使用C++来进行开发。
补充编程语言的知识时,除了掌握语言本身的知识之外。还需要同时学习:编译、构建、调试等方面的相关知识。这类很重要的知识一般C语言课程都没教:
芯片
基本掌握嵌入式处理器的基础知识。嵌入式处理器种类很多:MCU(微控制器)、MPU(微处理器)、DSP(数字信号处理器)等。MCU,也就是我们常说的单片机。
初学期,重点放在单片机的学习这一块。
理解整体框图、掌握基础外设如:GPIO、UART、TIM、ADC、DAC、I2C、SPI的裸机编程及相关原理、应用。
操作系统
基本掌握操作系统相关知识。
先了解学习RTOS,如RT-Thread等。学习操作系统内核知识:线程调度、时钟管理、线程间同步、线程间通信、内存管理、设备管理等,并掌握基本的使用。
再熟悉Linux操作系统的基本使用。
再学习Linux下的应用开发知识:多线程编程、多进程编程、文件I/O编程、网络编程等。
开发工具
基本掌握必备的开发工具。
VScode、VS、Sourceinsight、Vim的使用。
gcc、gdb的使用。
git的使用。
对比工具、串口工具、网络工具的使用。
解决问题的能力
上面几点都可以通过一些技术资料进行学习。这一点则需要需要在实战中锻炼,比如自己找一些小项目来做,一来可以把上面列出的几点内容给完整地串起来,二是在做项目的过程中会遇到很多问题,通过不断解决这些实际问题可以积累一些解决问题的经验。
工作之后,知识储备该有的都有了,大家最后拼的也都是解决问题的经验、能力。
我觉得牢牢地掌握这些99.99999%的概率都会用得上的嵌入式软件基础对找工作才比较有利。其它一些技术可以再用的时候再去了解、学习。
特别是一些行业相关知识,可以入行之后再进行学习。如果你一开始的目标就很明确,要在某一行、某一个方向进行深耕,也可以提早学习相关知识,早些积累一些优势。