登录/注册

嵌入式开发要学哪些东西

更多

好的,嵌入式开发是一个涵盖硬件和软件的广阔领域,需要掌握的知识体系比较复杂。以下是用中文总结的嵌入式开发需要学习的关键知识和技术,通常可以按层次学习:

核心基础(基石)

  1. C/C++语言:

    • C语言是重中之重! 嵌入式开发中绝大部分底层驱动、裸机程序、RTOS应用都是用C写的。必须精通指针、内存管理、结构体、位操作、预处理器、函数指针等。
    • C++: 随着嵌入式系统复杂度提升,很多应用层程序、中间件、框架(如Qt for Embedded)会用C++开发。需要掌握面向对象特性、模板、RAII、STL(部分受限)等。掌握C++对提升抽象能力和代码复用很有帮助。
  2. 电子硬件基础:

    • 数字电路: 理解与、或、非、异或等逻辑门,组合逻辑与时序逻辑(触发器、寄存器、计数器),了解数字电平(如TTL、CMOS)、总线概念。
    • 模拟电路: 基础即可,如二极管、三极管、电阻、电容、电感特性,运放基本原理,ADC/DAC概念。
    • 电路分析基础: 理解欧姆定律、基尔霍夫定律,能看懂简单的原理图。
  3. 计算机组成原理:

    • 理解CPU工作原理(冯诺依曼/哈佛结构)、指令集架构、存储体系(ROM/RAM/FLASH)、中断、DMA、总线架构等。

核心嵌入式知识与技术(核心武器库)

  1. 单片机/微控制器:

    • 体系结构: ARM Cortex-M(A7/A9/A53/A72等)、Cortex-A、RISC-V、PIC、AVR等常见内核架构。
    • 核心外设编程: GPIO、UART、I2C、SPI、ADC、DAC、TIMER(PWM)、Watchdog、RTC、中断控制器。
    • 时钟系统: PLL、系统时钟源配置。
    • 内存映射: 理解芯片手册中的内存地址分配。
    • 阅读Datasheet和参考手册: 这是嵌入式工程师最重要的能力之一!
  2. 嵌入式开发平台与工具链:

    • 集成开发环境: Keil uVision、IAR Embedded Workbench、STM32CubeIDE、Eclipse(配合CDT和插件)、VSCode(配合插件)、Segger Embedded Studio等。
    • 编译器: ARM GCC、Clang、IAR、Keil C/C++ Compiler。
    • 调试器/仿真器: J-Link, ST-Link, DAP-Link的使用。掌握单步执行、断点、查看变量/寄存器/内存、调用栈分析。
    • 烧录器/编程器: 掌握将程序下载到目标板的工具(通常集成在IDE和调试器中)。
    • 交叉编译: 理解在主机(PC)上为不同架构的目标机编译代码的概念。
    • 构建系统: Makefile、CMake的基本使用。
  3. 硬件描述语言 - 可选但加分:

    • Verilog/VHDL: 如果需要涉及FPGA/CPLD开发,或者需要更深层次理解数字电路实现(如简单的逻辑模块、接口控制器),需要学习。对于大部分嵌入式应用开发非必需。
  4. 实时操作系统:

    • RTOS基础概念: 任务(线程)、调度(优先级调度、轮转调度)、调度器、任务间通信(信号量、互斥锁、消息队列、事件标志)、任务间同步、内存管理(RTOS提供的方式)、中断处理上下文。
    • 主流RTOS:
      • FreeRTOS: 开源、轻量、应用广泛,资源占用少,学习曲线较平缓,非常适合入门。
      • RT-Thread: 国产开源,社区活跃,生态完善(SAL网络组件、FAT文件系统、GUI等),适合物联网应用开发。
      • µC/OS-II、µC/OS-III: 商业/开源混合模式,历史悠久,稳定可靠,但商业应用需授权费(部分版本)。
      • Zephyr OS: 由Linux基金会支持,为物联网设备优化,高度模块化,支持多种架构,具有强大的工具链和模拟器。
    • 使用RTOS的开发和调试: 理解其带来的复杂性(优先级反转、死锁、栈溢出诊断)和便利性(并发处理)。
  5. 嵌入式Linux:

    • Linux内核基础: 内核架构、模块、设备驱动模型(字符设备、块设备、网络设备)。
    • 设备驱动开发: 学习如何为特定硬件外设编写内核驱动(如LED、GPIO、I2C设备、ADC设备等)。
    • Bootloader: U-Boot是最常用的引导加载程序,需要了解其启动流程、配置、编译、移植、烧录和基本命令。
    • 根文件系统: 了解根文件系统的组成(如BusyBox、libc库)、构建方法(Buildroot、Yocto、Debootstrap)。
    • 构建系统:
      • Buildroot: 相对简单易用,适合快速构建目标系统。
      • Yocto: 高度灵活强大,定制化程度高,适合企业级产品,学习曲线陡峭。
    • 系统移植与裁剪: 将Linux移植到新硬件平台,根据需求裁剪内核和根文件系统。
    • Shell: 熟悉Linux常用命令行操作(bash)。
    • 基础网络知识: TCP/IP, UDP, Socket编程基础(对应用开发重要)。

应用开发与接口技术(上层建筑)

  1. 外设接口与协议:

    • 深入掌握: UART/RS232/RS485、I2C、SPI(重点理解时序图、主从模式)。
    • 其他常见:
      • CAN: 汽车电子、工业控制领域必备。
      • USB: 理解Host/Device/OTG模式,以及常见的通信类(如HID、CDC、MSC)。
      • Ethernet: 理解MAC、PHY层基础、MAC驱动、网络协议栈应用。
      • SD/MMC/eMMC: 存储接口。
      • LCD/Display: RGB、LVDS、MIPI-DSI等显示接口。
      • Camera: DVP、MIPI-CSI等摄像头接口。
    • 传感器应用: 温湿度、加速度计、陀螺仪、压力、光感等传感器通常通过I2C/SPI接入。
  2. 网络与通信协议 - 针对联网嵌入式设备:

    • 传输层/应用层: MQTT、CoAP、HTTP(S)、WebSocket。
    • 物联网协议栈: LwIP (轻量级TCP/IP协议栈)。
    • 低功耗无线: WiFi、Bluetooth (Classic/BLE)、Zigbee、LoRa、NB-IoT。
    • 安全传输: TLS/DTLS。
  3. 存储技术:

    • 内部FLASH编程、磨损均衡算法。
    • 外部存储器: NOR/NAND FLASH、EEPROM、SD卡、eMMC、UFS。
    • 文件系统: FAT/FAT32 (通用性好)、SPIFFS/LittleFS/JFFS2/YAFFS (为Flash优化的嵌入式文件系统)、ext系列。
  4. 图形用户界面:

    • 轻量级GUI库/框架: LVGL(开源流行)、QT for Embedded、MicroGUI、emWin、TouchGFX。
    • 概念: 帧缓冲、图形渲染、触摸输入处理。
  5. 调试与优化技能:

    • 逻辑分析仪: 抓取分析数字信号时序。
    • 示波器: 观察模拟/数字信号波形、测量电压、频率。
    • 万用表: 基础测量工具。
    • 性能分析工具: CPU利用率、内存泄漏检测、代码执行时间测量工具。
    • 代码优化: 大小优化、速度优化、内存使用优化、了解编译优化选项。
    • 单元测试: Ceedling、Unity等。
  6. 版本控制:

    • Git: 必不可少的代码管理和协作工具。掌握基本工作流、分支管理、冲突解决。

发展方向扩展(可选深造)

学习建议

  1. 循序渐进: 从最基础的电子、C语言、51/STM32裸机开始,打好硬件基础和编程能力。强烈建议早期以开发板进行裸机外设编程练习。
  2. 动手实践: 嵌入式开发是工程实践学科! 理论知识必须通过动手做项目来巩固。买一块主流的开发板(如STM32、ESP32、树莓派等)是必不可少的。
  3. 阅读官方资料: Datasheet、Reference Manual、Programming Manual、App Notes是核心,养成精读的习惯。
  4. 掌握RTOS或Linux之一: 在掌握裸机后,根据个人兴趣或项目需求,选择深入学习RTOS或嵌入式Linux方向。
  5. 善用工具: 熟练掌握调试器、逻辑分析仪、版本控制等工具。
  6. 理解原理而非死记硬背: 理解协议的底层原理、硬件的工作机制比单纯调用API库更重要。
  7. 关注开源社区: FreeRTOS、RT-Thread、Zephyr、Linux Kernel等都有活跃的社区和丰富资源。
  8. 英语能力: 虽然资料在增加,但最前沿的技术、核心文档(芯片手册、RTOS/Linux内核文档)仍以英文为主,需要一定的阅读能力。

这个列表看起来很庞大,不要有压力。学习是分阶段、逐步积累的过程。根据自己的目标(如是做8位单片机的小家电,还是做基于Linux的智能设备)来确定学习的优先级和深度。祝你学习顺利!

Linux系统的嵌入式开发是什么

嵌入式开发听起来很高大上,但其实它就在我们身边。   嵌入式开发是指将操作系统、应用程序或数据存储在嵌入式设备中,如手机、平板电脑、智能家

2023-10-12 15:40:39

什么人适合学习嵌入式开发

到底什么专业的人适合学嵌入式?或从事过自动化相关工作的人员,适合参加嵌入式学习吗?等等系列问题,接下来就问大家一一解答:究竟什么样的人才适合学习

2023-06-07 15:55:26

如何学习嵌入式开发呢?

  嵌入式是当下最流行的开发模式,从今天看,不管是从行业应用,还是智能硬件的爆发,物联网时代的来临,大数据等等嵌入式技术都得到了史无前例的发展。

2021-11-08 06:40:40

android开发板那种好,嵌入式用哪个开发板好?嵌入式开发板推荐

学习嵌入式,必不可少的工具就是一块开发板。对新手而言,学嵌入式用哪个

资料下载 罗星 2021-11-03 12:51:07

嵌入式学习培训能学会吗?嵌入式开发培训都要什么?

嵌入式学习培训能学会吗?嵌入式开发培训都要学什么?掌握Linux常用操作命令,与系统管理;理解

资料下载 佚名 2021-11-03 10:06:05

嵌入式开发培训什么?嵌入式开发板知识讲解

,arm11,powerpc,mips,mipsel等,或加上操作系统也属于嵌入式的开发。嵌入式开发是一项系统工程,要求

资料下载 李娜 2021-11-02 20:21:03

单片机属于嵌入式系统吗?嵌入式开发哪些课程?

记得在3月份,有一个学员问了我一个问题,什么是嵌入式,单片机是属于嵌入式吗?嵌入式开发

资料下载 佚名 2021-10-20 17:50:59

嵌入式开发(一):嵌入式开发新手入门

本篇文章整理下嵌入式开发中一些入门的基础技能,都是根据以往的工程经验整理,适用于之前没做过嵌入式开发的新手。嵌入式开发流程一般如下,一般是在PC

资料下载 佚名 2021-10-14 10:58:31

嵌入式开发培训都要什么?

嵌入式学习培训能学会吗?嵌入式开发培训都要学什么?掌握Linux常用操作命令,与系统管理;理解

2021-11-08 06:09:56

究竟嵌入式开发什么

学习嵌入式的就业前景广泛,你的职业发展方向有很多,可以说只要跟电子控制相关的工作,你都可以参与,当然嵌入式这个行业也非常利于个人创业,这也是为什么越来越多的人参加

2021-11-05 07:34:24

嵌入式开发

想学嵌入式开发,是不是必须要学C语言?

2021-07-28 15:00:14

嵌入式开发什么

。嵌入式开发要学哪些,嵌入式可以简单分为硬件与软件,然而其中的知识体系却

2021-01-18 06:36:18

嵌入式开发的产品有哪些_嵌入式开发的流程

本文主要阐述了嵌入式开发的产品,其次介绍了嵌入式开发的流程。

2020-08-31 15:38:26

21天通ARM嵌入式开发

21天学通ARM嵌入式开发

2020-05-07 09:36:29

嵌入式开发前你的了解的硬件有哪些

做嵌入式系统开发,经常要接触硬件。做嵌入式开发对数字电路和模拟电路要有一

2019-09-12 15:21:25

7天热门专题 换一换
相关标签