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
https://img2024.cnblogs.com/blog/3602479/202502/3602479-20250212014837962-1283754658.png
工作内容
系统设计与开发
驱动程序开发与调试
系统集成与测试
维护与升级
基础层
电子基础
[*]数字电路
[*]逻辑门
[*]真值表
[*]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
[*]博客园
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]