嵌入式,什么是嵌入式?都说嵌入式要学很多东西,那究竟又要学多少东西呢?
个人理解就是,将一个计算机系统,嵌入到任意地方去控制任意设备。注:这个计算机系统应该是计算机的软硬件系统。
从这一句话里面,我们就可以看出一个嵌入式系统需要什么。
首先就是一个完整的计算机系统,包括计算机的硬件和软件。
一般简单的嵌入式系统,计算机硬件由单片机代替,而软件则采用裸机开发的形式。有一些复杂些的,则是用实时操作系统等等方式控制。我还见过不少是直接用PC机(就是个人计算机)来控制的,当这个通用PC机变成某一专用用途的计算机时,其实也可以称为嵌入式。我甚至还见过拿手机来二次开发,直接插在设备里面当控制台的。这些都是嵌入式。
在这里,我们就可以看到嵌入式的复杂性之一了:定制一个合适的计算机系统。
首先要解决的就是什么是计算机系统。不过这方面目前比较成熟,不是冯诺依曼架构就是哈佛架构,理论需要解决的地方几乎没有。或者说,就是CPU厂家给你解决了。
什么是一个合适的计算机系统?控制别的设备的时候,我们需要成本那么高昂的cpu、内存吗?我们磁盘的速度需要那么快吗?甚至是说,我们需要磁盘吗?我们需要为我们的被控设备,提供一个成本合适的大脑。
假设当我们进入淘宝(误)选好我们所需要的器件时,我们又需要怎么组装起来呢?对于PC机,我们一般都能找到通用的主板和机箱,但是嵌入式没有。不同被控设备对于大脑的体积要求不一致。那么,我们又需要根据实际需求来制作电路。这里就需要电路的知识了,拓展一下就是数模电(硬件工程师),再继续拓展的话就是高频电路,往后到了高精度,布局也要细细拿捏,不然布局上电路也有可能呢会互相干扰,又有了专门的PCB工程师。有一些不同方向的,比如环境要求比较特殊,又要防多少电磁干扰那些,涉及的知识更多。
接下来就是,软件部分。软件首先就是底层的驱动部分。为了方便应用的开发,让开发者弄业务逻辑的时候不必去管底层的电路逻辑,就有专门的驱动工程师去解决这个问题。比如说当应用开发师想点亮一颗LED,他的代码直接就是点亮第几颗LED,而不是将0或1放到哪个寄存器,然后那个寄存器的作用是抬高那个端口电平,然后高电平能产生多少电路去点亮一颗灯。
对于操作系统的话,一般厂家会帮你解决的。有了一个常规的、管理CPU、内存和进程的操作系统以后,再配以合适的驱动,应用工程师就能做对应的开发了。甚至到了复杂度高的时候,负责维护操作系统运行的和做应用的不是同一个工程师。要负责业务的就专门做你那个业务就好了,我来负责你的业务什么时候出现,又什么时候结束。
讲到这里,我们终于貌似有了一个完整的计算机系统以供我们定制了(规模较大,不说规模不公平。其实很少时候需要这么一个大而全的东西。)接下来呢?接下来我们要控制什么东西呢?
比如说我们要做一个无人机,我们终于给它设计好了一个合适的大脑(这点其实矛盾了,不知道运行什么软件就不知道要多好的大脑,而不是先做好了大脑的硬件再去做软件,两者应该配合),那么,我们又该如何控制他呢?我们抽象到了可以直接写一句代码就能控制四个马达其中的一个的马力了,那这四个马达又要怎么样去配合呢?这部分就到了自动控制的部分了。四个马达怎么样配合才能平稳上升下降、怎么样才能左转右拐?
如果你做的不是无人机,是别的医疗设备呢?那岂不是学无止境?
其实我们讲到这里我们就已经可以发现了,其实每一个特定的环节都可以是由一个人来负责的。其实做无人机的公司有专门研究无人机算法的人,做医疗设备的公司也有专门做医疗设备算法的人。 想做嵌入式系统,关键是想成为这个行业,或者说是某一个集体里的哪一个人。
所以对于入门的话,最好学什么呢?如果是为工作考虑的话,那就学每一个嵌入式系统里最通用的那一部分吧。基本就是单片机、系统开发、还有一些基本的控制算法。那一个人基本上就能从事简单且完整的嵌入式开发了,再要深入的话,只能找队友打配合,然后自己专精研究某一阶段的开发了。那就是往后的事了。