嵌入式软件开发需要学习哪些内容?雷火电竞平台 雷火电竞
根据答主的个人嵌入式开发学习和工作经历,如果题主期望从事嵌入式软件开发道路,除了目前已经学习和掌握的C语言基础外,还有很多知识点需要投入精力进行学习和准备。
首先,需要明确的是嵌入式软件开发工作是一个很大很笼统的概念。根据嵌入式软件开发工作岗位的设定,答主从狭义上将嵌入式软件开发工作细分为如下三个方面(现在也有很多公司将FPGA的软件开发工作归类到嵌入式开发领域,这里答主因为接触不多,雷火电竞平台 雷火电竞不多谈)题主需要根据自己的兴趣爱好和未来的工作规划,选择适合自己的方向进行努力学习。
其次,上面每个细分需要掌握哪些专业技能和技术知识呢?答主在前面曾经的一篇回答中,进行了尽量细致的总结和整理,题主和对嵌入式软件开发有兴趣的朋友,可以自行进入到下面的问题链接中进行阅读。
答主因为从MCU的开发入门,进入到嵌入式开发领域,并通过工作逐步扩展到Linux的开发领域。从个人的理解和经历看,MCU相比较于Linux,存在技术门槛低、待遇低、重复造轮子严重的问题。所以,既然题主是一枚新入行的新人,如果可行并且题主对Linux存在兴趣,答主更建议题主将Linux作为自己的嵌入式技能栈。毕竟题主才大一。
最后,不论Linux还是MCU该如何学习呢?答主在前面也对如何学习Linux和MCU(推荐题主直接选择STM32,目前市场和开发的主流芯片)进行了整理和总结,此处就不再赘述。请题主及对嵌入式软件开发有兴趣的朋友,可以自行进入到下面的问题链接中进行阅读。
六年前我也跟你一样,大一,电信专业,不过那个时候我还没有像你这样就明确了自己以后想干嘛,想做哪个方向,所以很佩服题主你才大一就如此目标明确,哪像我那个时候还带着些迷茫。
本来今天下午在地铁上看见邀请我回答这个问题,想晚上回来再好好答一答的,不过晚上看了其它人的回答,发现他们已经把我想说的给说了。那就是基础一点要打好。
高数能学多扎实就学多扎实,工作以后你可能会遇到有时候需要实现某些算法,这个时候你不需要厚着脸皮去请教大牛给你解释某个论文里的算法推导过程。虽然敢于请教也是一种好的习惯。
把英语学扎实了,因为你是做嵌入式的,你需要阅读芯片手册,遇到难题,你可能需要查阅英文书籍、网站、论文等去寻找答案,你会用到github,stack overflow。
把电路,数模电也重视起来,虽然你是搞软件的,可是你一定要能看的懂电路图,不然搞什么嵌入式。
还有一个我当年很不喜欢的一门课程,因为老师上课极其无聊,每节课都是睡过去的。现在想想,这个锅得我自己背。那就是数据结构,现在觉得真的是挺重要的,做单片机的时候还没啥感觉,现在偶尔搞搞算法,真的发现这玩意真的能决定你的软件最终能搞到什么程度。软件等于数据结构加算法,这话是很有道理的。
其他的话,就是这个专业只学是不行的,必须多动手,多写写代码,多混混实验室,自己动手做出些东西出来,电赛什么的能参加一定要参加,而且最好拿拿奖,对于我们这些普通本科出来的人,这些奖项会在你找工作的时候很有帮助,即使考研,导师也会更喜欢有丰富项目经验的。
首先你要知道你自己要做什么,以后的发展方向如何,可以参考我的这个答案,为自己选择一个培养方式:嵌入式要怎么选择方向呀? - 知乎
下面说所有这些方向应该具备的基础。我简单的绘制了思维导图,总体上就是这样的。
我在读本科的时候没有一个完整的归类,一直都在不断的常识,不断的学习,在高考完的假期学的C语言(可以做一个科学计算器)就这个基础,学单片机,学MATLAB,学数据库,甚至学Java,那个时候每天处于一种繁忙的状态,可这些如果不亲自体会去学一学,就不知自己喜欢什么。后来大二下学期,我告别了这样繁忙的生活,开始钻研DSP,我的嵌入式之路就是从DSP开始的。那时候也是不断查资料,去试图理解这个行业。上图,每个嵌入式人可能都有自己的理解和归类,但站在我现在的角度我就是这样理解的。嵌入式的学习体系十分庞大,软、硬和理论基础都要掌握。除了算法工程师,还没见过一个可以脱离硬件单独开发软件的嵌入式工程师,即便是学习软件,也要掌握相应的硬件规则,我们的编程不同于CS的,我们要依托硬件,可能在硬件构造中,用了一个不同的小小的电容,我们的程序都可能会发生改变。
我把嵌入式分为三个大支柱,你需要三大支柱来支撑整个嵌入式理论体系。不是每一个分之都是重点,但有一些你需要掌握,需要了解,需要自己亲手去实验,这样有助于你做好充分的工作对接。你未来的工作,可能仅仅是某个分支上的一个的深化。
各位小伙伴不要划拉了,就是这里,干货满满,从学习路线,学习书籍,练手项目都总结好了!
作为一个去年拿下oppo,小米等十余家大厂offer的学长回答下。最近有公众号粉丝经常问我,如何学习嵌入式。粉丝有要求,咱们必需安排上。
不得不说,上班了是真的忙,每天只能抽下班回来的一个多小时写文章。这篇8000字的文章足足写了11天,修改了十几次。终于在十月中旬终于肝完了这篇文章。下面开始本文的内容,干货满满!
我个人是从STM32转到驱动开发的,在研二的时候学习了韦东山老师的驱动开发的课程,转到了驱动开发的方向。下面就如何学习嵌入式说下我个人的看法。
嵌入式即嵌入式系统,IEEE(美国电气和电子工程师协会)对其定义是用于控制、监视或者辅助操作机器和设备的装置,是一种专用的计算机系统。
国内普遍认同的嵌入式系统定义是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
从应用对象上加以定义来说,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。嵌入式系统作为装置或设备的一部分,它是一个控制程序存储在ROM中的嵌入式处理器控制板。
事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。
嵌入式工程师需要掌握的内容非常广泛,主要包括嵌入式软件、嵌入式硬件、以及相关行业、产品的专业知识。作为嵌入式初学者,我们不可能,也没有那么多精力把所有的知识到搞的很精通,我们要学会抓住重点,学会取舍,达到一通百通,事半功倍的学习效果。 首先嵌入式技术主要分为嵌入式软件和嵌入式硬件两大方向。
嵌入式硬件工程师主要工作职责是为产品设计硬件电路原理图,设计硬件PCB板,选择合适的元器件,焊接调试硬件电路板,保证硬件电路板的可靠性、稳定性和抗干扰能力。
因为现在集成电路发展迅速,大部分集成电路厂商都会提供参考电路,所以硬件电路原理图的设计相对来说比较简单,硬件工程师工作的含金量主要体现在产品的可靠性和稳定性设计、以及电磁兼容设计,这才是硬件设计工程师的含金量所在。
要成为一个资深的嵌入式工程师相当难,一方面要有非常扎实的理论知识,同时也要有相当的那种大型的、高频CPU、多层PCB板的设计经验。
嵌入式硬件工程师要学的课程主要有模拟电路设计、数字电路设计、电磁波理论等。熟悉常用的放大电路、滤波电路、电源电路设计和分析。
嵌入式软件工程师的职责主要是根据产品的功能需求设计好软件,让硬件工作起来。
嵌入式电子产品硬件部分,大部分都是相同的,核心的都是由CPU、RAM和FLASH 几大部分组成,而软件就千差万别了。产品的具体功能都是由软件来实现的,一般来讲一个产品的实现,软件设计的工作量是硬件设计的4 ~ 5倍。
所以一般情况下,一个公司的软件工程师数量是硬件硬件工程师的4~5倍,嵌入式软件工程师需求比硬件工程师大很多,同时跟硬件工程师相比,嵌入式软件工程师学起来相对容易些,所以这里我重点和大家谈一下嵌入式软件工程的学习路线。
码字不易,如果觉得本篇文章对你有帮助,可以双击下屏幕,点个免费的赞支持作者@仲一
C语言是嵌入式的重中之重,Linux操作系统就是用C实现的,包括安卓系统的底层也是C语言实现的,基础不牢,地动山摇,一定要打好基础。
C语言学习过程中重点要放在指针,结构体,文件的处理,数组等。在学习过程中,一定要多写代码,代码光看是看不会的。
遇到错误不要怕麻烦,善于使用搜索工具,百度,google,stack overflow。要知道,你遇到的问题别人肯定也会遇到过,一般在网上一搜就会有答案。
最后,要多调试程序,熟悉调试的过程。程序三分写,七分调,没有谁的程序是可以一遍写对的。而且,多调试程序也可以让我们理解程序具体是如何执行的。
嵌入式肯定要和硬件打交道的。如果做嵌入式的应用层的话,可能和硬件接触的少一点。但是很多企业在面试的时候,也会问一些基本的硬件知识。
比如,我同学在面试联发科的C++工程师的时候,就问到了他很多关于硬件的知识(中断是什么,轮询是什么,二者有什么区别,一个基本嵌入式系统有什么构成等),所以说硬件知识知道越多越好,就算做应用层,一些最基本的也要知道。
如果是打算做嵌入式底层的话,对于硬件知识的掌握要求就比较高了。比如,LCD是如何显示的,IIC协议/SPI协议是什么,如何收发数据,不同设备对于IIC的速度有什么要求,IIC协议上拉电阻一般是多少等等。只有明白了硬件原理,在看芯片手册的时候才能明白如何去配置各个寄存器。
此外,常用的设备仪器的使用能掌握就更好了,和硬件工程师扯皮的时候会用到。比如,万用表,示波器,逻辑分析仪等。不会也没关系,这部分不是必须的。
这部分是程序员的必修课。在各大厂的秋招春招中,笔试面试都是必考的。常见的数据结构如链表,二叉树,堆,队列,常见排序算法及其改进(快排,归并,冒泡,插入)等都是要掌握的。如果是为了找工作,这部分内容有很多是要能达到手写的目的。(相关内容见我整理的嵌入式软件工程师笔试面试指南)
虽然嵌入式对于数据结构与算法的要求不像传统互联网那么高,而且,这些数据结构在以后的工作中不一定可以用到,但是一些基本的我们还是要知道的。
像Linux内核中就用到了很多的链表,二叉树等。掌握这部分内容对于我们以后跳槽,深入研究操作系统都有很大的帮助。
这部分直接决定了我们以后是否能走的更远,像操作系统的基本概念,计算机组成原理的内容都是需要我们去了解的。比如自旋锁,信号量,阻塞与非阻塞等。
学习任何技术一定要学到这门技术的边界,对于嵌入式来讲,它的边界就是汇编。汇编语言不要求会写,但是一定要能看懂(其实就是Arm指令集)。在很多情况下,看反汇编文件对于bug的调试会更方便。
中断、定时器、串口、NAND FLASH、网络控制器、LCD屏、触摸屏等的工作原理。
如果你以后的方向是驱动开发,这部分学习的话重点放在硬件知识的理解。买个开发板,学习下他们的例程是如何写的,常用嵌入式外围设备的硬件工作原理,以及如何使用C语言来编程、控制这些硬件。把基本的外设都学习一遍,不求都会写,但是
有了之前的单片机基础,上手Linux开发就会快一点。可以买个ARM-A内核的开发板,ARM-A和stm32很多地方都是相通的,理解起来不难,二者最大的差别在于开发环境,很多新手入门Linux开发在搭建环境时就被劝退了。学习ARM-A前可以先看下 《
》,再去看韦老师视频的话会理解快一点,视频中讲到的难理解的这里基本都有。推荐一个 github仓库,上面放了上百本经典的嵌入式,计算机书籍,可以star一下,下次找书直接在上面搜索就可以了:
Linux系统调用概念,多进程,多线程实现多任务开发,多任务的同步互斥开发:互斥锁、信号量,网络数据通信过程,TCP/IP协议,Socket编程、TCP网络编程、UDP网络编程,QT编程。
书籍:《Unix环境高级编程》,《Unix网络编程》,《Qt Creator快速入门》视频:这部分视频没看过,可以在哔哩哔哩搜索下,找播放量高的就可以。
Bootloader的工作流程、UBOOT的编译、裁剪与移植、Linux内核的编译、裁剪与移植,根文件系统的构建、BootLoader、内核和根文件系统的烧写。重点驱动框架如:字符设备驱动、块设备驱动、LCD设备驱动、触摸屏设备驱动,总线设备驱动模型,输入子系统模型等。
书籍:《Linux设备驱动开发详解》《Linux设备驱动程序》视频:强烈推荐韦东山老师!!
对照视频一点一点学习的过程中,刚开始第一遍看的话会有很多地方不明白,不要紧。如果在查阅了一些资料后还是不明白,可以先往后放放,不用深究。内核的许多东西一旦深究起来,越陷越深。作为初学者,学习驱动开发主要
(比如,输入子系统模型常用的一个函数input_attach_handler()这个函数,刚开始我们只需要知道他是用来匹配dev设备和驱动软件就可以,暂时可以不用知道这个函数内部是如何实现的)。有一定基础之后,可以再去深究其中的某个点,思考他们为什么这么写。
码字不易,如果觉得本篇文章对你有帮助,可以双击下屏幕,点个免费的赞支持作者@仲一
书籍:这部分方向很多,我自己对很多方向也不了解。分享几本不错的内核书籍,《Linux内核设计与实现》《深入理解LINUX内核》《深入Linux内核架构》视频:哔哩哔哩搜索【Linux内核精讲】
经常会在往上看到有人讨论,嵌入式有35岁危机吗?不能说没有,只能说压力相比于互联网可能会小点。
嵌入式相对于互联网来讲,技术的更新迭代没有那么快。如果能在嵌入式某个领域深入研究,
推荐一个 github仓库,上面放了上百本经典的嵌入式,计算机书籍,可以star一下,下次找书直接在上面搜索就可以了
因为大学还有四年,未来还有很多变数改变你的想法,但有一颗从事技术的心,请深藏,请保留,请珍惜,请敬畏。
,汇编看得懂就行。作为学生,语言不求多,求一门熟练即可,关键在练。开发板+开发文档,这个是动手的基础,从控制一个LED灯,到星火燎原整个系统,大部分底层嵌入式软件工程师,都是在调试硬件的功能,在调试过程中融会贯通 以上资源,请与贵校实验室沟通。 等你有能力根据文档和需求,完成任何的一个调试,你就可以线步学习,也许在很多高校第二步是第一步的基础,我列在第二步,是因为很少人能线. 分界:管理软件or硬件驱动这时候你可能会有疑惑,到底嵌入式软件是什么? 管理软件:内存怎么管理,文件系统怎么管理存储设备,驱动模型是啥 看《Linux设备驱动程序》,《深入理解Linux内核》及类似书籍,建议前期看通俗易懂的。牛人创造,初学仿造,见Linux源码:
ux硬件驱动:中断到底是什么,硬盘到底如何读写,键盘怎么运作,WIFI怎么通信数据 这个我推荐一个网站:找你感兴趣的外围模块开始研究,四年你能深入研究一个就行,比如USB或 Flash或I2C等,其他的了解即可,不用深入研究。3. 修炼:数电和模电要成为大神,这个必经之路,也许你学后就不愿意做嵌入式软件了,因为它的淫技奇巧可以美称为神来之手。如果你能把这两个走上王者之路,我拜大神。经过这三步,加上多多实践,你在一家公司可以利于不败之地,至少也有口像样的饭吃。找不到,我可以推荐。
扫一扫关注微信公众帐号