嵌入式开发一般学什么
更多
对于嵌入式开发的学习,通常需要掌握一个比较综合的知识体系,涵盖硬件、软件、操作系统以及特定应用领域等多个方面。以下是核心的学习内容:
? 一、 基础核心(基石)
-
编程语言:
- C语言: 这是嵌入式开发的绝对核心语言! ? 必须精通:指针、结构体、联合体、位操作、内存管理(堆栈、静态区)、函数指针、宏定义等。几乎所有底层驱动、操作系统内核、裸机程序都是用C写的。
- C++: 在部分复杂度较高的应用层开发(尤其是涉及UI、复杂逻辑或需要面向对象的场景)中使用越来越多。嵌入式C++通常不使用庞大库。
- 汇编语言: 特别是目标处理器的汇编指令集(如ARM Thumb/Thumb-2)。不一定需要能写大型汇编程序,但要能看懂关键代码(如启动文件、中断服务程序的底层跳转)、理解指令周期、了解CPU架构基本原理(寄存器、ALU、内存总线等)。
-
电子与硬件基础:
- 数字电路基础: 门电路、锁存器、触发器、组合逻辑/时序逻辑概念、二进制/十六进制等。
- 模拟电路基础: 核心是理解 电平(TTL, CMOS)、电压/电流、ADC/DAC基本原理、运放基本应用(比较器、电压跟随)、电源管理概念(LDO, Buck/Boost)、滤波、基本的信号完整性(反射、串扰)。
- 元器件认识: 电阻、电容、电感、二极管、三极管、MOS管、LED、按键、晶振等的基本特性和应用。
- 硬件接口协议/总线(至关重要!): GPIO、UART/串口、I2C、SPI、USB、CAN、RS-485/232、SDIO、MMC/eMMC、并行总线、以太网(MAC/PHY)、LCD接口等。理解其时序、电平、物理层特性、数据格式是硬件驱动的基础。?
- 传感器原理与应用: 了解常见传感器(温度、光照、加速度计、陀螺仪、压力、霍尔等)的工作原理和接口(通常使用I2C/SPI/UART)。
- 原理图阅读能力: 能看懂开发板或硬件电路的核心部分原理图,特别是处理器/单片机管脚连接、外围设备接口。
- 示波器/逻辑分析仪使用: 必备调试工具! 能抓信号、看波形、分析时序、诊断硬件/协议问题。
-
微控制器/处理器架构: 这是你程序运行的“地盘”
- 主流架构: 深刻理解 ARM Cortex-M(主流!) /Cortex-A/R架构(重点在M系列),熟悉其核心寄存器、操作模式(特权/非特权)、中断/异常处理机制(NVIC)、内存映射、低功耗模式。
- 其他架构: 可能需要接触Cortex-R(实时)、Cortex-A(应用)、MIPS、RISC-V(新兴)等。
- MCU/MPU:
- MCU: 学习典型的通用MCU(如ST的STM32系列(最流行)、NXP的Kinetis/LPC、Microchip的PIC32/dsPIC、瑞萨的RX、TI的MSP430/C2000)或专用MCU(如ESP32/ESP8266等集成WiFi/BT的SoC)。
- MPU: 运行Linux等复杂OS的应用处理器(如NXP i.MX, TI Sitara, ST的STM32MP系列),需要理解CPU核心、内存控制器、丰富外设IP等。
- Datasheet & Reference Manual:
- “圣经”级文档阅读能力!? 这是嵌入式开发者区别于纯软件开发者的关键技能。要能查找目标芯片/模块的规格、功能描述、寄存器定义、编程指南、电气特性、参考电路等。
⚙ 二、 嵌入式系统软件关键技术
- 微控制器/外设驱动开发(裸机/带RTOS):
- 使用寄存器或官方驱动库(如STM32 HAL/LL库)对片上所有重要外设进行初始化、配置和使用(GPIO控制、UART收发、I2C读传感器/写EEPROM、SPI读写Flash、ADC采集、定时器做PWM/输入捕获等)。
- 理解外设的工作原理、中断处理流程(中断服务程序的编写与优化)、DMA的使用。
- 实时操作系统原理与应用:
- 概念: 任务/线程、调度算法(优先级抢占、轮转)、中断管理、任务间通信(信号量、互斥量、消息队列、邮箱)、同步(事件标志组)、资源管理、定时器、内存管理(堆、栈分配)、临界区。
- 主流RTOS: FreeRTOS(非常流行)、uC/OS-II/III、RT-Thread(国产优秀OS)、ThreadX等。
- 实践: 在目标硬件上移植RTOS,基于RTOS进行多任务应用开发(任务划分、优先级设置、通信同步等)。
- 嵌入式Linux开发(如使用MPU或高端MCU):
- 系统移植: Bootloader(U-Boot)移植与配置、Linux Kernel裁剪、配置、编译、移植(驱动适配)、根文件系统(Buildroot/Yocto/BusyBox)构建。
- 设备驱动开发: Linux设备驱动模型、字符设备驱动、平台设备驱动、设备树的使用、与硬件交互(映射寄存器、中断处理)、用户空间与内核空间交互(ioctl/sysfs)。
- 应用开发: 开发运行于嵌入式Linux环境上的C/C++应用程序。
- 环境与工具链: 交叉编译工具链、嵌入式Linux开发环境搭建(Ubuntu等)。
- Bootloader:
- 理解设备上电启动流程(ARM芯片的启动模式、复位向量、启动代码)。
- 了解Bootloader的作用(初始化硬件、加载OS/App)、常用Bootloader(如ARM MCU的启动文件、U-Boot)。
- 交叉编译与构建系统:
- 理解Host(开发机)与Target(嵌入式设备)的区别。
- 掌握交叉编译工具链(如
arm-none-eabi-gcc)的配置和使用。 - 使用构建系统/工具: Makefile(基础)、CMake(主流)、Scons、Autotools等管理和编译复杂工程。
- 调试与测试:
- 调试器: JTAG/SWD接口调试器(如J-Link, ST-Link, DAPLink)的使用,配合IDE进行单步调试、断点、观察变量和寄存器。
- 仿真与调试: 软件仿真(如QEMU)、硬件仿真。
- 打印调试: 串口打印(
printf重定向到串口)是常用手段。 - 单元测试 & 系统测试: 学习嵌入式环境的测试方法。
- 静态代码分析工具: 如
PC-lint/MISRA C Checker用于检查代码规范和安全风险。
? 三、 开发环境与工具
- 集成开发环境:
- MCU开发常用:Keil MDK-ARM, IAR Embedded Workbench, STM32CubeIDE(免费), VS Code + GCC + OpenOCD + Cortex-Debug插件(现代流行免费方案)。
- Linux开发常用:VS Code + 插件, Eclipse + CDT + Yocto/ADT插件, CLion等。
- 版本控制:
- Git: 必备! 管理源代码、协作开发。GitHub, GitLab, Gitee等平台的使用。
- 串口工具: Tera Term, Putty, SecureCRT, minicom/picocom等。
- 虚拟化和容器: 用于构建Linux开发环境。
- 项目构建与管理工具: Make, CMake。
? 四、 领域特定技术(根据方向选择)
- 无线通信: WiFi (802.11), Bluetooth/BLE, Zigbee, LoRa, NB-IoT, Sub-1G, 蜂窝模块(2G/3G/4G Cat1/Cat4/5G eMBB/RedCap)等协议栈使用与驱动/应用开发。
- 物联网: MQTT, CoAP, HTTP(S), WebSocket等应用层协议。云平台对接。
- 车载电子: CAN总线/CAN FD协议,LIN总线, AUTOSAR基础概念/开发。
- 工控: Modbus RTU/TCP, PROFIBUS, EtherCAT等现场总线,工控安全。
- 电机控制: FOC算法基础,电机驱动电路原理,PID控制理论。
- 人机交互: LCD/TFT显示驱动(RGB, MIPI-DSI, LVDS等), 触摸屏驱动(电阻、电容),GUI库(LVGL, emWin, Qt for Embedded等)。
- 多媒体处理: 图像采集(Camera接口),图像处理(OpenCV等),音频编解码。
- 定位与导航: GPS, Beidou, GNSS模块使用。
- 安全与加密: 基本的硬件安全模块、加密算法应用、安全启动、固件签名等概念。
? 五、 思维与软技能
- 问题分析与调试能力: 极其重要! 嵌入式系统问题往往交织软硬件,需系统性思维,善用工具,耐心排查。
- 硬件/软件协同设计思维: 理解设计决策对硬件资源、性能、功耗的影响。
- 资源意识: 深刻理解嵌入式系统的资源限制(CPU算力、内存大小SRAM/Flash/DDR、功耗、实时性)并据此进行优化和权衡。
- 性能与优化: 分析瓶颈(CPU占用率、内存使用、通信带宽),进行代码(算法)、结构、编译器优化。
- 低功耗设计: 掌握进入低功耗模式(Sleep, Stop, Standby等)的方法与唤醒源设计,理解动态调频调压。
- 实时性与确定性: 在设计满足实时性要求的任务处理和中断响应。
- 文档能力: 编写设计文档、API文档、用户手册、测试报告等。
- 持续学习能力: 硬件、协议、标准、工具更新快,需持续学习新知识。
? 六、 实践路线(至关重要!)
- 从简单开发板开始: 强烈推荐购买一块主流MCU的开发板(如STM32 Nucleo/Discovery系列入门)。
- 动手实践: 看十遍不如做一遍!照着教程做实验,修改示例代码,自己从零构建项目。
- 做小项目: LED控制、读取按键、串口通信、读写传感器、控制电机(步进/Servo)、驱动OLED/LCD、连接无线模块上传数据到云、实现简单的多任务应用等。不断升级项目复杂度。
- 参与开源: 阅读、理解甚至贡献一些嵌入式开源项目。
- 阅读优秀源码: 官方库源码、RTOS内核源码、U-Boot/Linux内核驱动源码等。
? 总结: 嵌入式开发的学习是一个金字塔式的过程:
- 金字塔底(基础核心): C语言、硬件基础、目标平台、调试工具、文档阅读能力。
- 金字塔中(关键技术): 外设驱动开发、RTOS/Linux系统、交叉编译、构建、通信接口。
- 金字塔顶(应用领域): 根据你的职业方向(IoT、车载、工控等)深入学习特定技术。
- 贯穿始终(实战与思维): 不断动手实践,强化调试能力、资源意识和系统思维。
最关键的是动手!挑选一个流行且资料丰富的平台(比如STM32 + FreeRTOS),买块板子,动手做起来,遇到问题去解决和总结,这是最快的成长路径。 祝你在嵌入式开发的道路上成功!?
嵌入式开发(一):嵌入式开发新手入门(转载后续需要修改补充)
本篇文章整理下嵌入式开发中一些入门的基础技能,都是根据以往的工程经验整理,适用于之前没做过嵌入式开发的新手。
资料下载
訾存贵
2021-11-02 20:06:00
为什么嵌入式开发中一般都使用Linux系统?
Linux系统与其它操作系统相比具有轻量化、易裁剪、稳定性高、免费开源等优势,且Linux系统能很好的安装在嵌入式领域中常用的处理器(如ARM等)。,Linux系统的这些特性都很适合嵌入式领域的需求,所以
资料下载
李杰
2021-10-21 09:51:13
嵌入式开发(一):嵌入式开发新手入门
本篇文章整理下嵌入式开发中一些入门的基础技能,都是根据以往的工程经验整理,适用于之前没做过嵌入式开发的新手。
资料下载
佚名
2021-10-14 10:58:31
7天热门专题
换一换
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机