找回密码
 立即注册
首页 业界区 安全 Think:如何成为嵌入式软件工程师

Think:如何成为嵌入式软件工程师

巴沛若 2025-6-11 13:41:44
嵌入式软件工程师

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
    • 博客园


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册