巴沛若 发表于 2025-6-11 13:41:44

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]
查看完整版本: Think:如何成为嵌入式软件工程师