IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 如何学习嵌入式 -> 正文阅读

[嵌入式]如何学习嵌入式

??哈喽,各位朋友大家好。我是参加2020年秋招的一名应届双非渣硕,在秋招中顺利拿下了小米,大华,兆易创新等8家公司的offer(笔试题目,面经等关注公众号免费领取)。最近有人在我的博客私信我,如何学习嵌入式。我个人是从STM32转到驱动开发的,在研二的时候学习了韦东山老师的驱动开发的课程。下面就简单说下我个人的看法吧,如果有说的不对的欢迎指正!

什么是嵌入式?

??嵌入式即嵌入式系统,IEEE(美国电气和电子工程师协会)对其定义是用于控制、监视或者辅助操作机器和设备的装置,是一种专用的计算机系统;国内普遍认同的嵌入式系统定义是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统;从应用对象上加以定义来说,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。

??嵌入式系统作为装置或设备的一部分,它是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。

嵌入式方向

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

嵌入式硬件方向

??嵌入式硬件工程师主要工作职责是为产品设计硬件电路原理图,设计硬件PCB板,选择合适的元器件,焊接调试硬件电路板,保证硬件电路板的可靠性、稳定性和抗干扰能力。因为现在集成电路发展迅速,大部分集成电路厂商都会提供参考电路,所以硬件电路原理图的设计相对来说比较简单,硬件工程师工作的含金量主要体现在产品的可靠性和稳定性设计、以及电磁兼容设计,这才是硬件设计工程师的含金量所在。 一个资深的嵌入式硬件工程师年薪都在10万~ 30万之间。

??要成为一个资深的嵌入式工程师相当难,一方面要有非常扎实的理论知识,同时也要有相当的那种大型的、高频CPU、多层PCB板的设计经验。嵌入式硬件工程师要学的课程主要有模拟电路设计、数字电路设计、电磁波理论等。熟悉常用的放大电路、滤波电路、电源电路设计和分析。

嵌入式软件方向

??嵌入式软件工程师的职责主要是根据产品的功能需求设计好软件,让硬件工作起来。嵌入式电子产品硬件部分,大部分都是相同的,核心的都是由CPU、RAM和FLASH 几大部分组成,而软件就千差万别了。产品的具体功能都是由软件来实现的,一般来讲一个产品的实现,软件设计的工作量是硬件设计的4 ~ 5倍。所以一般情况下,一个公司的软件工程师数量是硬件硬件工程师的4~5倍,嵌入式软件工程师需求比硬件工程师大很多,同时跟硬件工程师相比,嵌入式软件工程师学起来相对容易些,所以这里我重点和大家谈一下**嵌入式软件工程(偏底层)**的学习路线。

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

C语言

??C语言是嵌入式的重中之重,Linux操作系统就是用C实现的,包括安卓系统的底层也是C语言实现的。C语言学习过程中重点要放在指针,结构体,文件的处理,数组等。在学习过程中,一定要多写代码,代码光看是看不会的。遇到错误不要怕麻烦,善于使用搜索工具,百度,google,stack overflow。要知道,你遇到的问题别人肯定也会遇到过,一般在网上一搜就会有答案。最后,要多调试程序,熟悉调试的过程。程序三分写,七分调,没有谁的程序是可以一遍写对的。而且,多调试程序也可以让我们理解程序具体是如何执行的。

基本的硬件原理

??嵌入式肯定要和硬件打交道的。如果做嵌入式的应用层的话,可能和硬件接触的少一点,但是很多企业在面试的时候,也会问一些基本的硬件知识,比如,我同学在面试联发科的C++工程师的时候,就问到了他很多关于硬件的知识(中断是什么,轮询是什么,二者有什么区别,一个基本嵌入式系统有什么构成等),所以说硬件知识知道越多越好吧,就算做应用层,一些最基本的也要知道。

??如果是打算做嵌入式底层的话,对于硬件知识的掌握要求就比较高了。比如,LCD是如何显示的,IIC协议/SPI协议是什么,如何收发数据,不同设备对于IIC的速度有什么要求,IIC协议上拉电阻一般是多少,等等。只有明白了硬件原理,在看芯片手册的时候才能明白如何去配置各个寄存器。(我在秋招过程中整理了一份300多页,15W字的嵌入式软件工程师笔试面试的知识点,欢迎关注我的公众号:嵌入式与Linux那些事 免费领取)

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

数据结构与算法

??这部分是程序员的必修课。在各大厂的秋招中,笔试面试都是必考的。常见的数据结构如链表,二叉树,堆,队列,常见排序算法及其改进(快排,归并,冒泡,插入)等都是要掌握的。如果是为了找工作,这部分内容有很多是要能达到手写的目的。(相关内容见我整理的秋招笔试面试资料 )

??虽然嵌入式对于数据结构与算法的要求不像传统互联网那么高,而且,这些数据结构在以后的工作中不一定可以用到,但是一些基本的我们还是要知道的。像Linux内核中就用到了很多的链表,二叉树等。掌握这部分内容对于我们以后跳槽,深入研究操作系统都有很大的帮助。

计算机基础

??这部分直接决定了我们以后是否能走的更远,像操作系统的基本概念,计算机组成原理的内容都是需要我们去了解的。比如自旋锁,信号量,阻塞与非阻塞。还有汇编语言要求能看懂,其实就是要熟悉Arm指令集,在很多情况下看反汇编文件对于bug的调试会更方便。

学习路线推荐

基础阶段51+STM32

??如果你以后的方向是驱动开发或者应用层开发,这部分学习的话重点放在硬件知识的理解。买个开发板,学习下他们的例程是如何写的,为什么这么写?把基本的外设都过一遍,不求都会写,但是硬件原理都要搞清楚。

ARM-A+Linux(驱动方向)

??有了之前的单片机基础,上手Linux开发就会快一点。可以买个ARM-A开发板,ARM-A和stm32很多地方都是想通的,理解起来不难。学习ARM-A前可以先看下 《ARM体系结构与编程》,再去看视频的话会理解快一点,视频中讲到的难理解的这里基本都有。

??熟悉下Linux驱动开发的环境,比如Linux操作系统的使用,交叉编译工具的使用,makefile文件的编写(能看懂,简单的会写)等。

??对照视频一点一点学习的过程中,刚开始第一遍看的话会有很多地方不明白,不要紧。如果在查阅了一些资料后还是不明白,可以先往后放放,不用深究。内核的许多东西一旦深究起来,越陷越深。作为初学者,了解框架就可以了(比如,内核输入子系统模型常用的一个函数input_attach_handler()这个函数,刚开始我们只需要知道他是用来匹配dev设备和驱动软件就可以,暂时可以不用知道这个函数内部是如何实现的)。有一定基础之后,可以再去深究其中的某个点,思考他们为什么这么写。

Android驱动/音视频驱动

??一般在校生能到第二个阶段就已经相当不错了。这部分一般是在工作中学习的。音视频驱动,Android驱动都是比较深入一点的东西了,随便拿出一块内容,深入钻研下都可以成为这个领域的专家。

推荐书籍

C语言

??C primer plus,C语言三剑客

数据结构

??大话数据结构,数据结构与算法描述-C语言描述(有点抽象),还有一份我搜集的网上的一本资料,全是C语言实现的数据结构基础的内容,关注公众号免费领取。

硬件原理

??Arm体系结构与编程,Armv7/Armv9数据手册。

Linux驱动

??Linux设备驱动开发详解,Linux设备驱动程序

Linux应用编程

??Unix环境高级编程,Unix环境网络编程

计算机基础

??深入理解计算机系统,现代操作系统,计算机组成与设计:硬件软件接口,计算机体系结构:量化研究方法

Linux内核

??Linux内核完全注释(麻雀虽小五脏俱全),Linux内核设计与实现,Linux内核源代码情景分析

??以上说的书籍,都可以在我公众号免费领取电子版。

??养成习惯,先赞后看!如果觉得写的不错,欢迎关注,点赞,谢谢!

??如果对于我写的文章有什么意见或者建议欢迎留言,有任何问题均可联系我

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:43:22  更:2021-08-24 15:43:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 21:56:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码