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

嵌入式软件工程师

Technology has the power to make the world a better place
唯有热爱可抵岁月漫长

image

工作内容

系统设计与开发

驱动程序开发与调试

系统集成与测试

维护与升级

基础层

电子基础

  • 数字电路

    • 逻辑门

      • 真值表

        • 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__

  • 本文作者: 18408107475@163.com
  • 本文链接: https://www.cnblogs.com/luckyTS/p/18710827
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • posted @ 2025-02-12 01:57  lucky-Tang  阅读(12)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · DeepSeek-R1本地部署如何选择适合你的版本?看这里
    · 传国玉玺易主,ai.com竟然跳转到国产AI
    · 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
    · 我们是如何解决abp身上的几个痛点
    · 普通人也能轻松掌握的20个DeepSeek高频提示词(2025版)
    点击右上角即可分享
    微信分享提示