详解从0开始的嵌入式学习路线,学什么、怎么学?

嵌入式是个大筐,什么都可以往里面装,电子、机械、计算机、自动化、测控、通信、物联网……很多很多专业都和嵌入式沾边,硬件、驱动、操作系统、网络、应用、算法……很多同学越学越迷糊,越学越感觉什么也不会。

首先要记住一句话,嵌入式学习奥义:先观其广,再究其深

然后今天给大家捋一捋,一个嵌入式工程师从0开始,到底该学什么,怎么学。

参考资料:

嵌入式基础、C语言技巧、各类协议、ARM等各种知识分类整理均在大叔的嵌入式小站:

详解从0开始的嵌入式学习路线,学什么、怎么学?

1. 基础课打底

高数、英语、计算机基础,C语言程序设计……,这些基础课都是很重要的课,不要因为它们是基础课就忽视其重要性。

基础好了之后学进阶的知识才会厚积薄发,才会游刃有余。这些基础课就像是的内功,内功不行,根本就发挥不出精妙的招式,同样内功深厚,学什么都快。

我重点提几项特别需要重视的基础课:

1. 英语  大多数技术文档、官方资料都是英文的,甚至只有英文版,英语学好了,受益终身。口语不是特别重要,我建议直接搜一本Datasheet,开始啃,不管理不理解,先啃单词。推荐S2C2440的Datasheet

2. 高数  算法以及控制等都对数学上有要求,如果以后想做跟算法和控制相关的,必须好好学,如果不是也至少得及格。

3. 数电 模电 很多同学会想,我不搞硬件,我只搞软件。但是其实嵌入式这行没有办法完完全全避开硬件,即使你做软件、驱动、上层应用,也得了解基本的电路知识,不然硬件同事给你的电路图你都看不懂,根本无法沟通,对于想成为嵌入式硬件工程师的那就得好好学,多实践,自己搭建、仿真、做出实际电路练手。

2. C语言能力非常重要

C语言能力是一个嵌入式工程师最最基础的能力之一,可以说是整个嵌入式的地基(就算成为嵌入式硬件工程师,也必须有一定的C语言能力)。

地基打好了,才有上层建筑。学到什么程度?

最低条件:要对指针特别清楚、数据结构和算法:软件方向要好好学,其他方向必须过一遍。

推荐书籍

  1. The C programming language 《C程序设计语言》
  2. Pointers on C 《C和指针》
  3. C traps and pitfalls 《C陷阱与缺陷》
  4. Expert C Lanuage 《专家C编程》

没必要全看,重在实践。

嵌入式硬件的路线其实非常明白,学各种电子知识、各类电路设计、PCB、电磁兼容……我就不赘述了,下面主要讲嵌入式软件该学什么。

3. 单片机

学完C语言,就可以学单片机了。

先学51,你把基础课学好,就会发现51很简单。

1. 要有个开发板,学串口、中断、定时器、GPIO

2.买一些小模块,LCD显示屏、红外、舵机、超声波

3.自己搭建一下单片机最小系统

做个贪吃蛇、调温、测距什么的小东西,要多实践,多练手,51单片机开发板、教程都是大同小异,就不推荐了。

再学STM32

32裸机中的一部分和51是差不多的,比如串口、中断、定时器、GPIO,原理几乎一样,

32多了一些IIC、SPI、DMA等知识.推荐买个网上的开发板、野火、正点原子等,其实哪家都差不多,并且附带的资料也很全,也差不多。

再学实时操作系统,像ucos,freeRTOS等。

实时操作系统相比linux而言还是一个比较小、比较简单的操作系统,适合作为你入门操作系统的起点。

你可以通过它学习一下操作系统的知识,思考使用操作系统相对于裸机的优点,是不是更方便更有效率了。它里面的任务调度,信号邮箱的通信,中断、优先级的设计等等,基本是所有操作系统共有的特点。

了解它们实现的原理,对你后续linux的学习是很有好处的,跳过其实也行,不建议跳过。

4. ARM+Linux

了解ARM架构、ARM指令集,适当背一背知识点。推荐:《ARM体系结构与编程》杜春雷着

此时应当重点提高,拿到一款芯片和Datasheet,脱离例程,从0开始驱动一些基本模块的能力。

Linux系统

了解Linux常用命令,会一些基本的操作就行了,不需要太深入的学习每一个命令,用到的时候会去搜索就行了,推荐《鸟哥的Linux私房菜》

Makefile

了解它的基本规则,会用Makefile就可以。不需要深入研究那些make函数,因为在工作中有现成的,看得懂就行,很偶尔才需要自己去编写一套Makefile。这个搜搜资料就能学会。

ARM裸机驱动

自己编写一下启动代码、Makefile、硬件初始化。不想成为嵌入式驱动开发也必须好好学LED、按键、中断、UART等特别常见的基础驱动。

Linux内核与驱动

u-boot的移植,linux内核的移植,根文件系统的制作、linux下的基本驱动。推荐B站上韦东山老师的视频课程(非广告),韦老师讲课很到位,很详细。

u-boot的主要功能就是:启动内核。它涉及:读取内核到内存、设置启动参数、启动内核。工作中要么不改,要么小改,除非特殊方向。

u-boot的移植,linux内核的移植,根文件系统的制作,会就行,工作以后根据工作需求,再深入

linux下的基本驱动:比如先自己写一个led灯的驱动,试试驱动的安装和卸载这些流程,然后写一写复杂点的串口的驱动,移植一些复杂点的,比如网卡驱动、LCD屏的驱动等。

按照早期驱动模型平台设备驱动设备树的使用,把简单驱动过一下

会字符设备驱动其实就已经具备找工作的能力了。

在学习驱动过程中,你会越来越多的接触到内核。这时候免不了学点内核调试技术了,比如中断子系统、内核休眠与内核定时器,异步通知,内核同步机制等。

这是一个边实践,边学习的过程,初期目标也是会,不要太深入。

Linux应用

是否深入,跟你以后的工作有关,工作再深入不迟,但一些基本的应用开发编写能力是必要的:

  1. 基本设备的访问,比如LCD、输入设备
  2. 进程、线程、进程通信、线程同步与互斥
  3. 休眠-唤醒、POLL机制、信号
  4. 网络编程

5. C++和QT

这部分对于决心做驱动的同学是没必要的,对于决心做软件、嵌入式应用开发,还是需要学一学的。

这部分也没什么好深入讲的,C学得好学C++就很快,主要理解封装、继承、多态等面向对象特性,QT可以理解为C++的图形库。

学习C++和QT的话,推荐B站上黑马程序员的课程(非广告),讲得非常好。

6. 结尾

嵌入式实在是太杂了,人的精力是有限的,一定要记住我开头说的那句话,先观其广,再究其深。

你的深度是在实际工作中,根据工作具体方向不断深入的。

如果是学生,在校期间踏实学习,多动手实践,多参加蓝桥杯、电赛等比赛,结识同伴、锻炼技术、增加简历,一举多得。

如果是转行至嵌入式,要保持热爱,耐得住学习的寂寞。

嵌入式这行,越干越觉得自己会的东西好少,越干越深入,这也是为什么这行并不存在35岁危机的原因,只要你脚踏实地,随着时间的积累,自身价值愈发提升。

最后助大家学有所成,升职加薪。

猜你喜欢

转载自blog.csdn.net/freestep96/article/details/126556160