
由于嵌入式是软硬件之间的纽带,所以这篇博客我打算以一个电子产品从无到有的过程为主线,分析嵌入式在其中所扮演的角色,尽量通俗易懂的介绍一下嵌入式。(行文中为了保持通俗易懂,部分比喻与说法难免不甚严谨。若是有特别荒谬的原则性错误,望斧正。)
虽然,百度百科上面就有对嵌入式的词条介绍,很多书籍上面以及 上一些文章里面也有对嵌入式的介绍。但都过于专业,就拿百度百科的嵌入式词条来说,更像是对嵌入式的一个总结,涉及过多的专业名词和理论知识,行文过于坚硬死板。对于刚入行的小白来说,这些文章并不友好。(至少当初我刚刚开始学习的时候就没看懂)这些文章更适合在你已经对嵌入式有一定了解之后,再回来看。它们更像是学生时代上完课之后学霸的课堂笔记一样。可以帮你把零散的知识点串联起来,做个总结,但却不能使你在完全不听课的情况下了解这些知识点。小白需要的,可能只是该迷雾与其他已知事物的联系而非该迷雾本身的构成。所以这篇博客我并不打算通过介绍嵌入式的定义,组成和分类等来说明,而是从一个产品的形成来聊一聊嵌入式。文中引用部分里的内容仅是扩展,如果理解不了可跳过。
《嵌入式》
https://baike.baidu.com/item/%E5%B5%8C%E5%85%A5%E5%BC%8F/575465r=aladdin
《嵌入式系统》
https://baike.baidu.com/item/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%BB%9F/186978r=aladdin
嵌入式这个词虽然晦涩难懂,但其实它和我们的生活息息相关。如果身边的人问我嵌入式是什么,在时间有限而对方又不是想要深入研究的情况下,我一般会这样回答“嵌入式可以通俗的理解为用软件来控制硬件以实现某种特定的功能”。但如果有人要我认真详细的通俗易懂的介绍一下嵌入式,那么我会从嵌入式工程师是干什么的这个角度出发,以一个嵌入式产品从无到有的过程为切入点,解释一下嵌入式这个行业。
我们身边的很大一部分电子产品,其实都是嵌入式设备。当然并不是全部电子产品,像我们的通用电脑(PC)就不属于嵌入式设备的范围,它们之间的区别可查看我的另外一篇博客。像一些功能较为单一的电子产品,也不属于嵌入式设备。至于如何区分它们,我后面细说。
《通用计算机(PC)和手机是否属于嵌入式设备(嵌入式的定义)-杂谈》
https://blog.csdn.net/L_0x0b/article/details/106497327
现在的电子产品内部都是一些电路板。复杂点的像我们的。简单点的像。内部其实都是由一块或多块电路板组成的。
需要说明的是,像哪些电风扇啊,钨丝电灯泡啊这类的连板子都没有的并不是电子产品,它们属于电气机械邻域的产品了,一般意义认为电子产品是由电容电阻之类的元器件组成的。
《电子产品》https://baike.baidu.com/item/%E7%94%B5%E5%AD%90%E4%BA%A7%E5%93%81/10573839r=aladdin
而这块电路板都是由一堆电子元器件和一个或多个芯片组成。拆开手边的任何一个电子产品,里面都是这样的。而我们现在的高度发达的科技世界就是由这些电路板组成的。我们身边所有的科技产品都是这种电路板。
那么这块板是怎么来的呢无到有,想要说清楚这个流程。首先要知道,这个世界的分工是越来越细的了,这么一块电路板是由 会上面的多个国家多个领域多个公司多个岗位一起协作制造出来的。
目前来说这个世界上还没有任何一个公司能够独立生产出来一台手机。并不是技术上面不行,而是规模很难达到那么大,强如苹果仍然有部分技术源于外部。
这块电路板上面各式各样的元器件像电容、电阻、电感、二极管、三级管以及集成电路等
以及还有一些其他的元器件如,例举起来就太多了这里就不细说了,仅电阻电容和二极管之类的由于参数和功能以及封装的不同就会衍生出几百上千种不同的型 来。其中集成电路依据不同的公司不同的功能又有几百上千种,一般认为四方形的周围或底下有引脚的都称为集成电路.CPU也属于集成电路的一种(CPU属于超大规模集成电路),广义上的CPU一般认为是个人电脑里面的CPU,所以集成电路也有另外一个名称——芯片。只是我们一般不把小型的集成电路称作芯片罢了。
《集成电路》
https://baike.baidu.com/item/%E9%9B%86%E6%88%90%E7%94%B5%E8%B7%AF/108211r=aladdin
《中央处理器》
https://baike.baidu.com/item/%E4%B8%AD%E5%A4%AE%E5%A4%84%E7%90%86%E5%99%A8/284033romtitle=CPU&fromid=120556&fr=aladdin
《芯片、半导体和集成电路之间的区别是什么
https://www.zhihu.com/question/26112127
《【零基础】一文读懂CPU(从二极管到超大规模集成电路)》
https://www.cnblogs.com/cation/p/11192289.html
这些硬件材料,一般由一些院校的科研机构和政府的科研机构以及一些行业巨头的大公司以及一些元器件的生产厂家在弄,他们负责研发出这些最底层的电子元器件以及集成电路来,也就是由科学研究界负责最底层的材料那一块。他们把材料研发出来了,然后把研究成果交给一些元器件生产厂家去生产这些元器件。然后一些做产品的公司就会去买这些电子元器件进行自己的产品开发和生产。
但是单一的元器件是不能实现我们需要的功能的,我们需要把它们组合制作成满足各种各样功能需求的电路板才是一个成品。
现在基本的硬件材料有了,然后我们需要根据特定需求选择特定的元器件,并绘制原理图制作PCB板,该工作由负责硬件的工程师去完成。
该工程师在不同的公司里面由于细分的程度不同叫法不太一致,一般有硬件工程师、电路设计工程师、PCB工程师、嵌入式硬件工程师等等等等,搞软件的统一称他们为硬件工程师就对了。
硬件工程师负责把这些电子元器件组合起来绘制成原理图,他们绘制的电路板一般有两种,一种是带“控制芯片”的复杂电路,像、、、等。一种是不带“控制芯片”的简单电路,像、、等。
不带“控制芯片”的电路比较简单,纯粹由电子元器件以及一些小型的集成电路模块搭建而成。而带“控制芯片”的电路板一般会比较复杂而且特征也比较明显,核心为控制芯片,外围电路均是围绕着核心控制芯片搭建的模块电路。
需要特别说明的是,为了便于理解,我上面提到的和仅仅只是一个相对概念而已,并不绝对的正确。事实上有一些不带“控制芯片”的电路也会比带“控制芯片”的电路复杂很多,这主要是由于带“控制芯片”的电路一般都是以低频电路为主。而一些由、、、混合的电路即便不带“控制芯片”,但在设计的时候由于要考虑各个电路模块中的兼容性和稳定性等因素,其设计的难度往往更高电路更复杂。事实上由于嵌入式电路的特征较为明显,所以大部分嵌入式设备的电路板都大同小异,且一些高端设备像基于ARM的A系列芯片产品还分为核心板和底板两部分组成,核心板则是由一些像、、、这些公司设计开发的,硬件工程师只需要设计底板,从设计的角度看嵌入式电路反而是更加简单的。但总体而已,嵌入式电路还是会比绝大多数非嵌入式电路复杂。
当硬件工程师把原理图绘制出来了,现在原理图和PCB都有了,把他们交给PCB制版厂家就可以生产出电路板了。下一步就需要去采购原理图里面对应的元器件,然后进行检料与贴板。
检料就是把采购到的材料与PCB板进行二次确认,确认好参数、规格与封装与原理图上面是否对应。贴板就是把元器件焊接到电路板上面去,有时在测试阶段批量少时会人工贴,量产阶段批量大时则会采用机贴,做PCB制版的厂家就可以进行贴板。
在进行采购时,大部分元器件以及集成电路都会有很多供应商,但唯独“控制芯片”例外。由于研发生产难度较大,这个“控制芯片”是由世界上顶尖的几个公司合作设计制作的,也只有他们能够提供,并且一直处于垄断地位。
具体可参考我另外一篇博客
《嵌入式芯片与通用芯片(当前世界的芯片格局)-杂谈》
https://blog.csdn.net/L_0x0b/article/details/107361944
既然说这个世界上能设计生产芯片的公司那么少,芯片的设计制造难度又那么大。如果所有带控制的电子设备都需要一颗这样的控制芯片才能正常工作的话,那么仅仅靠这几家公司设计芯片,又怎么能满足几千上万种不同的电器使用呢道要为了电视机单独设计一款芯片,为了电冰箱单独设计一款芯片,为了智能手表单独设计一款芯片,为了电子门禁单独设计一款芯片者为了一个智能灯泡单独设计一款芯片/p>
这显然不现实,总共就那么几家公司,他们不可能专门为全世界所有智能电子产品都设计出特定的芯片来。其实他们生产的芯片功能都是一样的,都是处理指令、运算数据。根据指令的不同可以控制芯片处理各种各样的事情。而编写这些指令的工作,则是由程序员来做了。程序员可以通过编写程序下载到芯片中去指导这个芯片工作,同时控制着外围电路和传感器,以实现各式各样想要的功能。基于这个原理,一款芯片就能够同时适应很多不同的电子产品了()。
具体想要什么功能,生产电子产品的厂家自己编程写自己的程序进芯片里面,指导芯片工作,用来实现自己想要的功能。而这个按照特点需求写特定代码进芯片里面指导芯片工作的人,就是嵌入式工程师了。
为了便于理解,我上面一段的说法并不太严谨。首先CPU能直接识别的指令我们程序员也是编写不了的,由于电平只有高低两种状态的原因,导致了电脑只能识别0和1两种数据,也就是说CPU能直接识别的指令只能是由0和1组成的。我们显然写不出全是0和1组成的程序,那样不仅难度系数太大可阅读性太低而且长度也巨长。所以程序员写的代码都是需要通过编译器进行编译才能转换为CPU能直接识别的二进制程序,即便是像汇编一样接近底层的语言也是一种符 化的机器语言,仍然需要转换为0和1组成的二进制指令。其次这些经过编译后的二进制程序也不是直接下载到芯片中去的,它们会先被下载到内存中去,然后CPU再从内存中读取指令数据到CPU内部的指令寄存器中,再对指令进行解析处理和执行。
《CPU的内部架构和工作原理》
http://blog.chinaunix.net/uid-23069658-id-3563960.html
《一条指令在cpu中的执行流程(理解CPU组成)》
https://blog.csdn.net/aigoogle/article/details/23750257
所以一块原理图是怎么生产出来的最后再给你回顾一下这个过程。首先,一个公司想要生产一个电遥控飞机,然后公司老板就让他们的硬件工程师设计原理图,然后硬件工程师就会和嵌入式工程师沟通,选好芯片型 确定好方案后,然后电子工程师就开始根据功能需求画电冰箱或遥控飞机的原理图,等原理图画好后。
就给到嵌入式工程师,然后嵌入式工程师就根据原理图以及芯片手册开始编程写代码,这期间硬件工程师就从世界上仅有的几家芯片公司手上买回来芯片,从一些元器件厂家手中买到需要的电子元器件,然后就委托到一些电路板制造厂家那里制作出电路板,然后把电路板交回到嵌入式工程师手中,嵌入式工程师就开始把程序烧写进这块电路板里面开始调试。
等到调试成功了之后,这个电路板就可以装进遥控飞机里面,然后老板就可以拿着这个遥控飞机去卖钱了。这就是一个电子元器件从无到有的一整个过程了。当然实际情况会比我这里说的要复杂一些,还有遥控飞机的模型,材料,和机翼的选择之类的要考虑,但整体情况差不多就这样了。
由于这个世界已经分工的越来越细了,嵌入式工程师又可细分为好几个不同的方向,大方向可分为嵌入式硬件工程师和嵌入式软件工程师。也有居于具体芯片系列分的51单片机工程师和stm32工程师、而有一些芯片由于比较高级,是可以带系统的,这就有衍生出嵌入式驱动工程师以及嵌入式系统工程师这些岗位,等等等等。且嵌入式工程师和 会上比较常见的软件工程师(像Java研发工程师、WEB前端开发工程师、Pyhton研发工程师、H5开发工程师、游戏开发工程师、MFC界面开发工程师等)不一样,虽然对外都可自称搞IT的都是写代码的,但嵌入式的代码和硬件有较大的相关性会跑在不同的硬件平台上面,而他们的代码更多的是纯软件平台的操作,更多是跑在电脑端以及手机端。
嵌入式负责控制最底层的硬件,给软件提供接口,然后他们软件工程师那边在我们提供的接口上面开发。就像你电脑上面的软件是没法直接访问电脑上面的硬件的,电脑的硬件由嵌入式控制,我们在提供接口给到电脑上面的软件实现功能。
参考:
《你不知道的过去 – Linux 系统发展史小览 (与Unix区别科普文)》
https://www.iplaysoft.com/p/brief-history-of-linux
《计算机发展史》
https://blog.csdn.net/wanddoudou/article/details/81330672
写在后面
零BUG是原则性问题。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!