25届嵌入式秋招介绍和超全学习路线
一、个人背景
交流:xihongshixuezhang
双非本9硕
投递70家,面试近30场,offer10+,
- 自动驾驶感知算法——很少
- 嵌入式软件开发——大头
- C++软件开发——小头
- C++后端开发——小小头
- 测开——一家
二、嵌入式薪资
与什么有关
- 学历(本科、硕士)
- 能力(会多少技术栈)
- 公司
薪资水平(相对)
三、嵌入式岗位介绍
3.0、什么是嵌入式?
- 嵌入式是干啥的?
- 嵌入式就是让微控制器(MCU)或处理器在特定硬件平台中运行特定软件,使其实现如数据采集、信号处理、控制执行、数据传输、显示反馈等任务,以满足特定行业或应用场景的功能需求。
- 嵌入式系统广泛应用于工业控制、智能家电、消费电子、汽车电子、医疗设备、通信设备、机器人、物联网设备等领域。
- 什么专业可能会相关:
- 电子信息、自动化、测控、通信、计算机、软件工程、信息工程、电气、集成电路、机械、车辆工程
3.1、C++方向:
C++作为一种高性能的编程语言,在软件开发领域有着广泛的应用。C++岗位一般分为以下几类:
-
1、C++软件开发:涉及桌面应用、游戏开发、图形渲染等领域,需要扎实的C++基础和面向对象编程思想。
-
2、后端开发:利用C++的高性能特点,在服务器端进行高并发、高可用系统的开发,如金融交易系统、分布式存储等。
-
3、系统软件开发:包括操作系统、数据库、编译器等底层软件的开发,对系统原理和底层架构有深入理解。
虽然C++相关的岗位相对其他语言可能较少,但由于其复杂性和高性能特点,对开发者的要求较高。
3.2、嵌入式方向:
嵌入式系统广泛应用于物联网、智能家居、工业控制、汽车电子等领域。嵌入式方向大致可以分为以下几类:
-
1、嵌入式硬件开发
- 主要负责硬件电路设计、PCB绘制、硬件调试等。这一方向需要电子、电气工程方面的知识,不多展开。
-
2、嵌入式软件开发:
-
应用层开发:
- Linux用户态开发
- 在Linux操作系统的用户空间进行开发,如使用Qt进行界面设计,或者开发与硬件交互的应用程序。工作内容相对简单,主要关注业务逻辑的实现。
- 实时操作系统(RTOS)开发:
- 基于实时操作系统(如FreeRTOS、μC/OS)进行应用开发,常用于对实时性有要求的嵌入式设备。Stm32、rtos、操作系统,通信总线
- Linux用户态开发
-
底层驱动开发:
-
内核裁剪与移植:在资源有限的硬件上对 Linux 内核进行裁剪、配置和移植的方法。
-
驱动程序开发:在Linux内核态编写驱动程序,与硬件直接交互。
嵌入式软件开发对C/C++语言、数据结构、操作系统等基础知识有较高要求。底层驱动开发虽然难度较大,但薪资水平高,发展前景广阔。
-
需要深入理解操作系统原理、硬件架构和驱动模型,入门和学习难度较大。
-
-
3.3、自动驾驶相关方向:
自动驾驶是当前的热点领域,涉及多学科的交叉。主要分为以下几个方向:
- 应用层开发:
- 功能开发:基于中间件或平台提供的接口,开发自动驾驶功能模块,如路径规划、环境感知、人机交互等。
- 智能座舱开发等:涉及车载娱乐系统、信息显示、语音交互等,提升用户的驾驶体验。
- 中间件开发:
- 中间件框架:负责封装底层操作系统和硬件接口,为上层应用提供统一的编程接口。需要对系统架构和软件设计模式有深入理解。
- 通信框架:开发车辆内部网络通信协议,确保各模块之间的数据传输可靠。
- 底层开发:
- 操作系统层开发:涉及实时操作系统的开发和优化,对系统的实时性、安全性进行保障。
- 硬件驱动开发:为传感器、执行器等硬件设备编写驱动程序,与硬件直接交互。
3.4、怎么确定自己学什么?
- 根据岗位要求,看看自己想去什么样的岗位
- 会的技术栈越多,秋招能投的岗位越多
- 进一步学对应的知识
- 举例
3.5、学习资料怎么找
- 1、列举要学习的内容
- 2、小破站
- 播放量、时长、评
- 3、不是每个内容都要项目实践
- 综合一点的
- 足够深入
- 自己完成代码功能
3.6、总结
- 概括不够全面,仅供大家参考
- 提供方法,大家根据自己实际情况去选择
四、编程相关学习
4.1、编程语言
- C语言
- 基础语法
- 结构体/枚举/位操作
- 函数、指针(重要)、内存管理
- C++
- C++基础
- 面向对象特性(抽象、类、封装、继承、多态)
- 模板、泛型、STL、新特性
- 学习资料:黑马程序员+实际项目实践
4.2、计算机基础知识
- 4.2.1、数据结构与算法
- 数据结构:
- 字符串、栈、队列、链表、堆、树、队列、数组、哈希表等
- 算法:
- 查找、排序
- 经典算法思想(动态规划、回溯等)
- 学习资料:《代码随想录》、《hot 100》、《hello 算法》
- 数据结构:
- 4.2.2、操作系统原理
- 内存管理和调度
- 多任务:多线程/并发/线程
- I/O原理
- 文件管理
- 学习资料:王道考研
- 4.2.3、计算机网络原理
- 网络模型
- TCP/IP协议栈划分
- ping原理等
- 学习资料:湖工大教书匠
- 4.2.4、单片机原理/微机原理
- 计算机基本组成
- 指令和总线
- 处理器架构和设计
- 存储系统
- I/O系统
- 学习程度:选择性学习
4.3、Linux操作系统
- Linux基本使用
- 系统概念和特点
- Linux环境安装和搭建
- 目录结构
- 基本命令和常用工具
- 基本网络管理
- 基本编译器链
- 基本的shell编程
- Linux下的C/C++开发
- 编辑器:Vim
- 编译
- 编译器套件:GCC、g++
- 编译工具:make, makefile, cmake/autotools
- 调试:GDB
- 运行
- Linux系统编程
- 系统调用
- 内存管理和使用
- 内存分配
- 内存管理
- 多任务编程
- 进程管理
- 进程概念:创建、终止、退出
- 进程间通信:管道、无名管道、消息队列、信号、信号量、共享内存、套接字
- 线程
- 线程概念、
- 线程编程:创建、终止、等待、同步、互斥、信号
- 进程管理
- 文件I/O编程
- 文件/文件描述符
- 文件结构/文件描述符
- 文件指针/文件描述
- 标准I/O流、标准I/O操作、非阻塞I/O、异步I/O
- 网络编程
- TCP/IP协议栈
- Socket通信(客户端/服务端)
- TCP、UDP编程
- 学习资料
- 有基础
- 大丙编程
- 没基础
- 完整学一遍
- 有基础
4.4、图形化界面编程:QT
- 学习内容
- 对话框/窗口、信号与槽、组件、网络通信、多线程等
- 学习资源
- 学习程度:不需要学太深入
4.5、机器人操作系统ROS
- 1、基础知识
- 节点(Node)、话题(Topic)、消息(Message)、服务(Service)、动作(Action)、参数(Parameter)
- TF 坐标变换
- 仿真环境
- Gazebo 仿真
- RViz 可视化
- 2、进阶应用
- 传感器与驱动集成
- 使用 ROS 包对常见传感器(LIDAR、深度摄像头、IMU、里程计、触觉传感器)进行数据获取和话题发布
- 机器人运动控制与路径规划
- ROS 工程实践
- ROS package 的组织结构
- launch 文件的编写
- 参数文件的管理
- 传感器与驱动集成
- 3、ROS 1与 ROS2 的对比与迁移
- 了解 ROS1 与 ROS2 在通信机制(ROS1 基于 roscore,ROS2 基于 DDS)、安全性、实时性、跨平台性方面的区别
- 4、学习资料
- 古月居
- 项目实践
- 开源项目
- 教育机器人
4.6、嵌入式典型平台(ARM)
- 7.1、裸机开发(stm32)
- 学习内容
- GPIO
- 典型电路、相关寄存器、工作模式
- 中断
- 工作模式、中断向量表、优先级、中断处理流程、主/外部中断
- 定时器
- 时钟体系和时钟、关键寄存器和控制、PWM定时器、看门狗定时器、实时时钟RTC
- 存储器
- 协议/接口/总线
- 串口、485、IIC、SPI、CAN
- GPIO
- 学习资料:野火、正点原子,项目实践
- 本质:用代码驱动各种外设,实现对应的功能
- 学习内容
- 7.2、RTOS(实时操作系统)
- FreeRTOS
- FreeRTOS 是一种轻量级、开源的实时操作系统内核(RTOS),专门为嵌入式微控制器(MCU)环境设计。
- 学习资料丰富
- 学习资料:韦东山
- 项目实践
- RT-Thread
- RT-Thread 是一款国产的开源实时操作系统(RTOS)
- FreeRTOS
4.7、C++后端开发
- 1、数据库
- Mysql
- Redis
- 2、设计模式
五、嵌入式硬件基础
模电/数电基础
熟悉常用仪器仪表:万用表、电烙铁、焊台、示波器、信号发生器等
熟悉常见器件通信/传输方式/协议/接口/总线:串口、IIC、SPI、CAN、485、TCP/IP
会看或画基本原理图和PCB板
会看硬件时序图
会基本的电路仿真
六、常见开发工具
Linux指令
Git
Shell
Vim
GCC
makefile
GDB
交叉编译工具链
七、秋招准备
1、简历
2、手撕代码
3、面经
- 自我介绍
- 项目
- C/C++
- 操作系统
- 计网
- Linux
- Stm32
- 一些工具