Think:如何成为嵌入式软件工程师
嵌入式软件工程师
Technology has the power to make the world a better place
唯有热爱可抵岁月漫长
- 压缩包下载(PDF、Xmind、Png):
https://files.cnblogs.com/files/blogs/839288/嵌入式软件工程师.zip?t=1739296486&download=true
工作内容
系统设计与开发
驱动程序开发与调试
系统集成与测试
维护与升级
基础层
电子基础
-
数字电路
-
逻辑门
-
真值表
-
AND
-
OR
-
NOT
-
XOR
-
-
-
时序电路
-
触发器(D Flip-Flop)
-
计数器
-
状态机设计
-
-
总线协议
-
地址总线
-
数据总线
-
控制总线
-
时序分析
-
-
-
模拟电路
-
ADC/DAC
-
逐次逼近型 vs Σ-Δ型
-
分辨率与采样率选择
-
-
电源管理
-
LDO
-
DC-DC转换器(Buck/Boost)
-
低功耗设计
-
-
传感器接口
-
温度传感器(DS18B20)
-
加速度计(MPU6050)
-
-
-
常用元器件
-
贴片(0805、0603)
-
电阻
-
电容
-
电感
-
-
功率器件
-
MOSFET 驱动电路
-
热设计(散热片与 PCB 布局)
-
-
-
计算机组成原理
-
数字逻辑与硬件基础
-
布尔代数与逻辑门(AND/OR/NOT/XOR)
-
组合电路(多路复用器、译码器)
-
时序电路(触发器、寄存器、计数器)
-
有限状态机(FSM)设计
-
-
数据表示与运算
-
二进制/十六进制表示(补码、浮点数)
-
算术逻辑单元(ALU)结构与运算流程
-
位操作优化(掩码、位移)
-
-
存储器系统
-
存储层次:寄存器→缓存→主存→外存
-
缓存工作原理(Cache Line、映射策略)
-
内存管理:地址空间、内存对齐
-
-
CPU架构与指令集
-
指令集架构(RISC vs CISC)
-
指令周期:取指→译码→执行→写回
-
流水线技术(冒险与解决方法)
-
-
输入输出(I/O)系统
-
I/O接口:轮询 vs 中断 vs DMA
-
中断处理流程(ISR、优先级、嵌套)
-
DMA传输机制(减少CPU占用)
-
-
总线与通信协议
-
总线类型:系统总线(地址/数据/控制)
-
通信协议:SPI/I2C/UART/CAN
-
总线仲裁与冲突解决
-
-
编辑基础
-
C语言
-
内存管理
-
free()
-
calloc()/malloc()
-
-
指针与内存
-
函数指针
-
数组指针
-
结构体指针
-
内存对齐
-
-
数组
-
匿名数组
-
指针数组
-
结构体数组
-
多维数组
-
-
位操作
-
寄存器位掩码(|=、&= ~)
-
位域(struct { uint8_t flag : 1; })
-
-
枚举/结构体/联合体
-
-
C++
-
STL
-
RTTL
-
面向对象
-
封装(类与访问控制)
-
继承(虚函数与多态)
-
抽象
-
类
-
多态
-
-
模板编程
-
泛型容器(std::vector
) -
模板元编程(编译期计算)
-
-
资源管理
-
RAII(资源获取即初始化)
-
智能指针(std::unique_ptr)
-
-
-
Python
-
脚本自动化
-
使用 pySerial 控制串口设备
-
pandas 处理日志数据
-
-
硬件交互
-
树莓派 GPIO 控制(RPi.GPIO 库)
-
自动化测试框架(pytest)
-
-
数据处理
-
-
数据结构和算法
-
数据结构
-
字符串
-
图
-
哈希
-
树
-
队列
-
栈
-
堆
-
链表
-
数组
-
-
算法
-
排序
-
查找
-
-
-
计算机网络
-
TCP/IP协议和分层
-
ARP协议
-
IP协议/ICMP协议
-
IP协议/ICMP协议
-
NDS协议/HTTP协议/HTTPS协议
-
核心层
微控制器(MCU)
-
架构与选型
-
ARM Cortex-M
-
M0(低成本)
-
M4(带 FPU,适合 DSP)
-
M7(高性能)
-
-
RISC-V
-
开源架构(如 GD32VF103)
-
工具链(riscv-gcc)
-
-
AVR
-
ESP32
-
双核 Wi-Fi/BLE 芯片
-
FreeRTOS 集成
-
-
-
开发框架
-
STM32
-
标准库开发
-
HAL/LL库开发
- HAL 的抽象层 vs LL 的直接寄存器操作
-
-
ESP-IDF
- 基于 FreeRTOS 的 ESP32 开发框架,支持事件循环(Event Loop)
-
Arduino兼容库
- 快速原型开发
-
-
外设驱动开发
-
GPIO
-
输入(上拉/下拉电阻)
-
输出(推挽/开漏模式)
-
-
Timer
-
PWM 生成(占空比调节)
-
输入捕获(测量脉冲宽度)
-
-
通信接口
-
UART
-
波特率配置
-
DMA 传输(减少 CPU 占用)
-
-
SPI
-
主从模式
-
片选信号(CS)管理
-
-
I2C
-
ACK/NACK 处理
-
总线冲突检测
-
-
-
实时操作系统(RTOS)
-
任务管理
-
任务优先级
- 抢占式调度 vs 时间片轮转
-
任务间通信
-
队列(xQueueSend())
- 传递结构化数据
-
信号量(二进制/计数信号量)
- 同步资源访问
-
互斥锁(xSemaphoreTake())
- 防止优先级反转
-
-
-
FreeRtos
-
任务调度
-
队列
-
信号量
-
-
Zepher
-
多线程
-
低功耗支持
-
-
内存管理
-
静态分配
- 固定大小内存池
-
动态分配
- 堆管理(pvPortMalloc())与碎片优化
-
-
低功耗模式
-
睡眠模式
- Idle 模式(唤醒源:定时器、外部中断)
-
停机模式
- 关闭外设时钟,保留 RAM 数据
-
通信协议
-
有线
-
UART
-
SPI
-
I2C
-
CAN总线
-
帧格式(标准帧 vs 扩展帧)
-
仲裁机制
-
应用场景:汽车 OBD-II 诊断、工业控制
-
-
USB协议栈
-
CDC(虚拟串口)
-
HID(人机接口设备)
-
使用 libusb 开发主机端驱动
-
-
-
无线
-
BLE(低功耗蓝牙)
-
GATT 协议(服务与特征值)
-
广播包过滤
-
开发工具:nRF Connect(Nordic 芯片)
-
-
Wi-Fi
-
LoRa
-
扩频技术
-
传输距离与功耗平衡
-
网关设计(如 ChirpStack 服务器)
-
-
ZigBee
-
工具层
开发工具链
-
编译器与调试器
-
GCC 交叉编译链
- arm-none-eabi-gcc 编译 Cortex-M 代码
-
Keil MDK
-
集成调试(ULINK 仿真器)
-
性能分析(Event Recorder)
-
-
OpenOCD
-
开源调试工具
-
支持 SWD/JTAG 接口
-
-
-
仿真与测试
-
模拟 ARM 处理器
-
逻辑分析仪
- Saleae 或 PulseView 抓取 SPI/I2C 波形
-
单元测试
- CppUTest 框架验证驱动逻辑
-
QEMU
-
Proteus
-
-
协作与自动化
版本控制与协作
-
Git
-
分支管理
- 分支策略
-
冲突解决
-
子模块管理
-
Hooks 脚本
-
-
CI/CD
-
GitHub Actions 自动化编译固件(.hex 文件)
-
Jenkins 部署自动化硬件测试(如通过串口发送测试指令)
-
进阶层
低功耗设计
-
睡眠模式
- Sleep/Stop模式
-
功耗分析工具
- Energy Trace
-
硬件级优化
-
动态电压频率调节(DVFS)
- 动态电压频率调节(DVFS)
-
外围设备时钟门控(关闭未使用的外设时钟)
-
-
软件策略
-
中断驱动设计(替代轮询)
-
短时唤醒(如每 10 秒采集一次数据)
-
使用 __WFI()(等待中断)指令进入深度睡眠
-
嵌入式Linux
-
内核裁剪与驱动开发
-
交叉编译
- Buildroot/Yocto
-
内核开发
-
设备树(Device Tree)配置外设(如 &i2c1 节点)
-
字符设备驱动框架(file_operations 结构体)
-
-
用户态开发
-
Socket 编程(TCP/UDP 服务器)
-
多线程(pthread 库)
-
安全与可靠性
-
加密算法
-
AES
-
AES-128/256 加解密
- 硬件加速模块使用
-
-
安全启动(Secure Boot):验证固件签名
-
SHA
-
-
看门狗
-
ECC内存
- 纠正单比特错误,检测双比特错误
-
独立看门狗
-
窗口看门狗
-
linux操作系统
-
基本使用
-
系统概述和特点
-
系统概述和特点
-
目录结构
-
基本命令和常用工具
-
基本网络管理
-
基本系统管理
-
基本的shell编程
-
-
Linux平台的C/C++开发流程
-
编辑
-
vim
-
Emacs
-
-
编译
-
编译套件
- gcc
-
编译工具
-
gcc
-
makefile
-
cmake/aototools
-
-
-
调试
- gdb
-
运行
-
-
Linux系统平台编程
-
系统控制
-
内存管理和使用
-
多任务编程
-
文件I/O编程
-
网络编程
-
图形化界面编程
-
应用层
应用层
-
行业场景
-
汽车电子
-
AUTOSRA
- 分层架构(应用层、RTE、BSW)
-
CAN
- CAN 通信(PDU 路由、DBC 文件解析)
-
功能安全
- ISO 26262 标准,ASIL 等级划分
-
-
物联网
-
MQTT
-
QoS 等级(0/1/2)
-
保留消息
-
使用 Mosquitto Broker 搭建私有服务器
-
-
OTA 升级
-
差分升级(减少传输数据量
-
安全签名验证
-
-
CoAP
-
-
工业控制
-
Modbus
-
RTU 模式(CRC 校验)
-
TCP 模式(从站地址映射)
-
使用 libmodbus 库实现主从机通信
-
-
PLC
-
梯形图编程
-
实时性保障
-
-
-
-
项目
-
智能家居
-
硬件
- STM32 + ESP32(Wi-Fi 中继)
-
功能
-
采集温湿度(DHT11)并通过 MQTT 上报云端
-
通过 BLE 控制智能灯泡(PWM 调光
-
-
技术点
-
FreeRTOS 任务划分
-
JSON 数据解析(cJSON 库)
-
-
-
无人机
-
飞控算法
-
PID 控制(姿态稳定)
-
路径规划(A* 算法)
-
卡尔曼滤波(传感器融合)
-
-
硬件
-
STM32F7 + MPU6050(陀螺仪)
-
无刷电机驱动
-
-
通信
- 2.4GHz 射频模块(NRF24L01)传输遥控指令
-
-
穿戴设备
-
低功耗
-
采集数据后立即进入睡眠模式
-
BLE 广播间隔优化(1s → 2s)
-
-
BLE通信
-
硬件
-
nRF52832(BLE SoC)
-
心率传感器(MAX30102)
-
-
数据同步
- 通过 Nordic UART Service(NUS)上传至手机 App
-
-
嵌入式应用层开发
-
内存管理/使用
-
内存分配
-
内存管理
-
-
多任务编程
-
进程
-
进程概念和基础
-
进程控制
-
创建
-
等待
-
退出
-
-
守护进程
-
守护进程的编写
-
错误处理
-
-
进程间通信
-
管道通信
-
消息队列
-
信号
-
信号量
-
共享内存
-
socket通信
-
-
-
线程
-
线程的概念和基础
-
线程控制和编程
-
属性
-
创建
-
等待
-
退出
-
清楚
-
同步
-
优先级
-
-
-
-
文件I/O编程
-
文件/文件描述符
-
文件指针/文件流
-
缓冲
-
流操作:开/闭/读/写/内容定位等
-
标准I/O流
-
标准I/O操作
-
非阻塞I/O
-
异步I/O
-
多路复用
-
-
网络编程
-
TCP/IP协议族
-
Socket通信和应用
-
TCP编程
-
UDP编程
-
-
图像化界面编程
-
Qt开发基础
-
C++-QT
-
Py-C++
-
-
对话框/窗口
-
信号与槽
-
组件/控件/布局/事件
-
绘图
-
文件操作
-
定时器
-
多线程
-
网络通信
-
学习路径与资源
初级阶段
- 《C Primer Plus》《STM32CubeMX 实战指南》
中级阶段
- 《Mastering STM32》《FreeRTOS 实时内核实战》
高级阶段
- 《嵌入式Linux系统开发》《AUTOSAR 规范详解》
工具与社区
-
论坛
-
EEVBlog
-
Stack Overflow
-
CSDN
-
博客园
-
__EOF__
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek-R1本地部署如何选择适合你的版本?看这里
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 普通人也能轻松掌握的20个DeepSeek高频提示词(2025版)