嵌入式学习路线
作者:姜蘅洋🖊️
1.什么是嵌入式开发:
- 嵌入式开发主要工作是开发嵌入式系统。
- 嵌入式系统Embedded System:
- 嵌入机械或电气系统内部、具有专一功能和实时计算性能的计算机系统。
- 嵌入式系统常被用于高效控制许多常见设备,被嵌入的系统通常是包含数位硬件和机械部件的完整设备。
- 嵌入式系统Embedded System:
2.嵌入式开发路线:
- 嵌入式系统开发:
- 微控制器开发:现代操作系统主要是基于微控制器(例如STM32),在较复杂的系统中,也会使用微处理器。
- 需要对微控制器的体系结构有比较明确的认知,这需要计算机体系结构的相关知识以及微控制器专门的参考手册,至少能熟练掌握微控制器的启动过程。
- 需要熟练掌握一两款常用微控制器的使用方法,目前比较主流的微控制器:STM32、ESP32,能够基于微控制器实现板级开发(BSP)。
- 这需要熟练的掌握C语言以及常见数据结构(如链表、队列等),同时还需要对微控制器的底层寄存器使用有相应了解,以及相关处理器架构的汇编代码,例如启动代码。
- 对于常用的微控制器,不支持运行Linux操作系统,需要掌握RTOS,这需要操作系统的相关知识,并且能够熟练使用至少一款Linux操作系统(例如Ubuntu)的使用。
- 图形用户界面开发(GUI):
- 嵌入式领域GUI开发有两个方向:
- 面向微控制器的GUI开发:
- 基于微控制器(STM32/ESP32)实现图形用户交互界面,能够熟练掌握相关GUI框架。
- 面向主流处理器的GUI开发:
- 能够掌握主流GUI库(QT/Imgui),实现跨系统的用户交互界面,对C++有深刻理解,具有扎实的面向对象的功底。
- 面向微控制器的GUI开发:
- 嵌入式GUI需要熟练掌握相关工具的使用:
- 交叉编译链,例如arm-none-eabi-gcc
- cmake
- git
- ......
- 嵌入式领域GUI开发有两个方向:
- 外围设备开发:
- 通过微控制器对外设进行开发和驱动。
- 能够看懂开发原理图,看懂芯片的参考手册和数据手册。
- 对通信协议:IIC、SPI、CAN等有深刻理解。
- 需要较强的C语言基础并且对计算机网络有深刻理解。
- Linux驱动开发:
- Bootloader的工作流程、UBOOT的编译、裁剪与移植、Linux内核的编译、裁剪与移植,根文件系统的构建、BootLoader、内核和根文件系统的烧写。
- 重点驱动框架如:
- 字符设备驱动、块设备驱动、LCD设备驱动、触摸屏设备驱动,总线设备驱动模型,输入子系统模型等。
- 重点驱动框架如:
- 对Linux设备驱动开发有相当深刻的了解,熟练掌握蓝牙、WiFi、USB等协议内容,深入了解UNIX、Linux内核。
- Bootloader的工作流程、UBOOT的编译、裁剪与移植、Linux内核的编译、裁剪与移植,根文件系统的构建、BootLoader、内核和根文件系统的烧写。
- 微控制器开发:现代操作系统主要是基于微控制器(例如STM32),在较复杂的系统中,也会使用微处理器。
3.一些建议:
- 如果想学好嵌入式开发,那么就要付出相当多的努力,对于一个优秀的嵌入式开发工程师,除了对计算机有深刻了解外,还必须对电子电路、机械等领域有所涉及。
- 在人工智能领域飞速发展的今天,也需要掌握人工智能的相关知识,对于有深刻计算机理解的嵌入式工程师来讲,这并不困难,因为你已经对不同架构、不同系统的计算机了如指掌。
- 放弃功利心,在这个异常浮躁的社会,嵌入式工程师应该踏实走好脚下的路,即使身边有相当多简单且高薪的职业,但请相信,嵌入式是可以学习和工作一生的职业。
- 请怀有一颗不断追寻新技术、不断突破自我的心,否则,嵌入式领域会让你异常痛苦。
- 真正的大师,永远怀着一颗学徒的心。