关于嵌入式:干货分享嵌入式学习路线公开书籍推荐视频推荐练手项目

5次阅读

共计 4036 个字符,预计需要花费 11 分钟才能阅读完成。

哈喽,大家好,我是仲一。最近有小伙伴在微信私信我,如何学习嵌入式。始终想写一篇学习路线的文章,因为各种起因拖到了当初。趁着国庆节在家,终于肝完了这篇文章。

我集体是从 STM32 转到驱动开发的,在研二的时候学习了韦东山老师的驱动开发的课程,转到了驱动开发的方向。上面就如何学习嵌入式说下我集体的认识。

什么是嵌入式?

嵌入式即嵌入式零碎,IEEE(美国电气和电子工程师协会)对其定义是用于管制、监督或者辅助操作机器和设施的安装,是一种 专用的计算机系统

国内广泛认同的嵌入式零碎定义是 以利用为核心 ,以 计算机技术为根底,软硬件可裁剪,适应利用系统对性能、可靠性、老本、体积、功耗等严格要求的专用计算机系统。

从利用对象上加以定义来说,嵌入式零碎是软件和硬件的综合体,还能够涵盖机械等从属安装 。嵌入式零碎作为安装或设施的一部分,它是一个控制程序 存储在 ROM 中的嵌入式处理器控制板

事实上,所有带有 数字接口的设施,如手表、微波炉、录像机、汽车等,都应用嵌入式零碎,有些嵌入式零碎还蕴含操作系统,但大多数嵌入式零碎都是由单个程序实现整个管制逻辑。

嵌入式方向

嵌入式工程师须要把握的内容十分宽泛,次要包含 嵌入式软件、嵌入式硬件、以及相干行业、产品的专业知识 。作为嵌入式初学者,咱们不可能,也没有那么多精力把所有的常识到搞的很精通,咱们要学会 抓住重点,学会取舍,达到一通百通,事倍功半的学习效果
首先嵌入式技术次要分为嵌入式软件和嵌入式硬件两大方向。

嵌入式硬件方向

嵌入式硬件工程师次要工作职责是为产品 设计硬件电路原理图,设计硬件 PCB 板,抉择适合的元器件,焊接调试硬件电路板,保障硬件电路板的可靠性、稳定性和抗干扰能力

因为当初集成电路倒退迅速,大部分集成电路厂商都会提供参考电路,所以硬件电路原理图的设计相对来说比较简单,硬件工程师工作的含金量次要体现在产品的 可靠性和稳定性设计、以及电磁兼容设计 ,这才是 硬件设计工程师的含金量所在

要成为一个资深的嵌入式工程师相当难,一方面要有十分 扎实的理论知识 ,同时也要有相当的那种 大型的、高频 CPU、多层 PCB 板的设计教训

嵌入式硬件工程师要学的课程次要有 模仿电路设计、数字电路设计、电磁波实践 等。相熟罕用的 放大电路、滤波电路、电源电路设计和剖析

嵌入式软件方向

嵌入式软件工程师的职责次要是依据产品的性能需要设计好软件,让硬件工作起来

嵌入式电子产品硬件局部,大部分都是雷同的,外围的都是由 CPU、RAM 和 FLASH 几大部分组成,而软件就千差万别了。产品的具体性能都是由软件来实现的,一般来讲一个产品的实现,软件设计的工作量是硬件设计的 4 ~ 5 倍

所以个别状况下,一个公司的软件工程师数量是硬件硬件工程师的 4~5 倍 ,嵌入式软件工程师需要比硬件工程师大很多,同时跟硬件工程师相比,嵌入式软件工程师学起来绝对容易些,所以这里我重点和大家谈一下 嵌入式软件工程 的学习路线。

学习嵌入式须要那些内容?

C 语言

C 语言是嵌入式的重中之重,Linux 操作系统就是用 C 实现的,包含安卓零碎的底层也是 C 语言实现的,根底不牢,地动山摇,肯定要打好根底。

C 语言学习过程中重点要放在 指针,构造体,文件的解决,数组 等。在学习过程中,肯定要多写代码 代码光看是看不会的

遇到谬误不要怕麻烦,长于应用搜寻工具,百度,google,stack overflow。要晓得,你遇到的问题他人必定也会遇到过,个别在网上一搜就会有答案。

最初,要 多调试程序,相熟调试的过程。程序三分写,七分调,没有谁的程序是能够一遍写对的。而且,多调试程序也能够让咱们了解程序具体是如何执行的。

根本的硬件原理

嵌入式必定要和硬件打交道的。如果做嵌入式的应用层的话,可能和硬件接触的少一点。然而很多企业在面试的时候,也会问一些根本的硬件常识。

比方,我同学在面试联发科的 C ++ 工程师的时候,就问到了他很多对于硬件的常识(中断是什么,轮询是什么,二者有什么区别,一个根本嵌入式零碎有什么形成等),所以说 硬件常识晓得越多越好,就算做应用层,一些最根本的也要晓得。

如果是打算做嵌入式底层的话,对于硬件常识的把握要求就比拟高了。比方,LCD 是如何显示的,IIC 协定 /SPI 协定是什么,如何收发数据,不同设施对于 IIC 的速度有什么要求,IIC 协定上拉电阻个别是多少等等。只有明确了硬件原理,在看芯片手册的时候能力明确如何去配置各个寄存器。

此外,罕用的设施仪器 的应用能把握就更好了,和硬件工程师扯皮的时候会用到。比方,万用表,示波器,逻辑分析仪等。不会也没关系,这部分不是必须的。

数据结构与算法

这部分是程序员的必修课。在各大厂的秋招春招中,口试面试都是必考的。常见的数据结构如 链表,二叉树,堆,队列,常见排序算法及其改良(快排,归并,冒泡,插入 )等都是要把握的。如果是为了找工作,这部分内容有很多是要能达到手写的目标。( 相干内容见我整顿的嵌入式软件工程师口试面试指南

尽管嵌入式对于数据结构与算法的要求不像传统互联网那么高,而且,这些数据结构在当前的工作中不肯定能够用到,然而一些根本的咱们还是要晓得的。

像 Linux 内核中就用到了很多的链表,二叉树等。把握这部分内容对于咱们当前跳槽,深入研究操作系统都有很大的帮忙

计算机根底

这部分间接决定了咱们当前是否能走的更远,像操作系统的基本概念,计算机组成原理的内容都是须要咱们去理解的。比方自旋锁,信号量,阻塞与非阻塞等。

学习任何技术肯定要学到这门技术的边界,对于嵌入式来讲,它的边界就是汇编。汇编语言不要求会写,然而肯定要能看懂(其实就是 Arm 指令集)。在很多状况下,看反汇编文件对于 bug 的调试会更不便

学习路线举荐

入门:51+STM32

次要学习内容

中断、定时器、串口、NAND FLASH、网络控制器、LCD 屏、触摸屏等的工作原理。

学习资源举荐

视频:野火,晚点原子

书籍:野火,晚点原子

学习倡议

如果你当前的方向是驱动开发,这部分学习的话重点放在 硬件常识的了解 。买个开发板,学习下他们的例程是如何写的,罕用嵌入式外围设备的硬件工作原理,以及如何应用 C 语言来编程、管制这些硬件。把根本的外设都学习一遍,不求都会写,然而 硬件原理肯定要搞清楚

进阶:ARM-A+Linux

这部分次要分为两个方向:Linux 利用开发,Linux 驱动开发。上面我会对这两个方向别离进行阐明。

有了之前的单片机根底,上手 Linux 开发就会快一点。能够买个 ARM- A 内核的开发板,ARM- A 和 stm32 很多中央都是相通的,了解起来不难,二者最大的差异在于开发环境,很多新手入门 Linux 开发在搭建环境时就被劝退了。学习 ARM- A 前能够先看下《ARM 体系结构与编程》,再去看韦老师视频的话会了解快一点,视频中讲到的难了解的这里根本都有。

举荐一个 github 仓库,下面放了上百本经典的嵌入式,计算机书籍,能够 star 一下,下次找书间接在下面搜寻就能够了

github 书籍宝藏仓库

github 拜访不了能够拜访这个:gitee 书籍宝藏仓库

利用开发

次要学习内容

Linux 零碎调用概念,多过程,多线程实现多任务开发,多任务的同步互斥开发: 互斥锁、信号量,网络数据通信过程,TCP/IP 协定,Socket 编程、TCP 网络编程、UDP 网络编程,QT 编程。

学习资源举荐

书籍:《Unix 环境高级编程》,《Unix 网络编程》,《Qt Creator 疾速入门》

视频:这部分视频没看过,能够在哔哩哔哩搜寻下,找播放量高的就能够。

驱动开发

次要学习内容

Bootloader 的工作流程、UBOOT 的编译、裁剪与移植、Linux 内核的编译、裁剪与移植,根文件系统的构建、BootLoader、内核和根文件系统的烧写。

重点驱动框架如:字符设施驱动、块设施驱动、LCD 设施驱动、触摸屏设施驱动,总线设施驱动模型,输出子系统模型等。

学习资源举荐

书籍:《Linux 设施驱动开发详解》《Linux 设施驱动程序》

视频:强烈推荐韦东山老师!!

学习倡议

对照视频一点一点学习的过程中,刚开始第一遍看的话会有很多中央不明确,不要紧。如果在查阅了一些材料后还是不明确,能够先往后放放,不必深究。内核的许多货色一旦深究起来,越陷越深。

作为初学者,学习驱动开发次要 学习驱动的框架 (比方,输出子系统模型罕用的一个函数 input_attach_handler() 这个函数,刚开始咱们只须要晓得他是用来匹配 dev 设施和驱动软件就能够,临时能够不必晓得这个函数外部是如何实现的)。有肯定根底之后,能够再去深究其中的某个点,思考他们为什么这么写。

大神:各类简单驱动

个别自学能到第二个阶段就曾经相当不错了。简单驱动局部个别是在工作中学习的。像 Android 驱动,音视频驱动,usb 驱动,wifi,蓝牙协定,内核开发 等都是比拟深刻一点的货色了,轻易拿出一块内容,深刻钻研下都能够成为这个畛域的专家。

学习资源举荐

书籍:这部分方向很多,我本人对很多方向也不理解。分享几本不错的内核书籍,《Linux 内核设计与实现》《深刻了解 LINUX 内核》《深刻 Linux 内核架构》

视频:哔哩哔哩搜寻【Linux 内核精讲】

总结

  1. 在学习的过程中,咱们应该抓住不变的货色,思考下这些 不变的内容是否对咱们当前把握变动的货色有帮忙
  2. 不论是学习任何技术,肯定要学到这门技术的边界。对于嵌入式开发来讲,汇编,这就是软件的边界
  3. 常常会在往上看到有人探讨,嵌入式有 35 岁危机吗?不能说没有,只能说压力相比于互联网可能会小点。
  4. 嵌入式绝对于互联网来讲,技术的更新迭代没有那么快。如果能在嵌入式某个畛域深入研究,建设起技术的护城河,或者职业生涯会长一点。
  5. 聪慧,好奇,合作,虔诚,随遇而安。

举荐一个 github 仓库,下面放了上百本经典的嵌入式,计算机书籍,能够 star 一下,下次找书间接在下面搜寻就能够了

github 书籍宝藏仓库

github 拜访不了能够拜访这个:gitee 书籍宝藏仓库

练手我的项目举荐:分享 GitHub 上一些嵌入式相干的高星开源我的项目

正文完
 0