嵌入式是什么?(一个电子产品的从0到1)-杂谈

在这里插入图片描述这篇博客,我想聊聊嵌入式。在IT行业,存在着很多不同的领域与不同的职位,由此也延伸出了各式各样的工程师。但其中嵌入式工程师算是比较迷糊的一个职位了,即便同是IT的同事也有不少问过我“嵌入式是干什么的?”更别说是非IT行业的人以及刚刚入门的小白了。甚至于在我刚接触嵌入式的较长一段时间内,也都不能很好的解释嵌入式是什么?可能是由于“嵌入式”这个名字本身就晦涩难懂,以及定义模糊导致的。


由于嵌入式是软硬件之间的纽带,所以这篇博客我打算以一个电子产品从无到有的过程为主线,分析嵌入式在其中所扮演的角色,尽量通俗易懂的介绍一下嵌入式。行文中为了保持通俗易懂,部分比喻与说法难免不甚严谨。若是有特别荒谬的原则性错误,望斧正。

虽然,百度百科上面就有对嵌入式的词条介绍,很多书籍上面以及网上一些文章里面也有对嵌入式的介绍。但都过于专业,就拿百度百科的嵌入式词条来说,更像是对嵌入式的一个总结,涉及过多的专业名词和理论知识,行文过于坚硬死板。对于刚入行的小白来说,这些文章并不友好。(至少当初我刚刚开始学习的时候就没看懂)这些文章更适合在你已经对嵌入式有一定了解之后,再回来看。它们更像是学生时代上完课之后学霸的课堂笔记一样。可以帮你把零散的知识点串联起来,做个总结,但却不能使你在完全不听课的情况下了解这些知识点。小白需要的,可能只是该迷雾与其他已知事物的联系而非该迷雾本身的构成。所以这篇博客我并不打算通过介绍嵌入式的定义,组成和分类等来说明,而是从一个产品的形成来聊一聊嵌入式。文中引用部分里的内容仅是扩展,如果理解不了可跳过。

《嵌入式》
https://baike.baidu.com/item/%E5%B5%8C%E5%85%A5%E5%BC%8F/575465?fr=aladdin
《嵌入式系统》
https://baike.baidu.com/item/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%BB%9F/186978?fr=aladdin


嵌入式这个词虽然晦涩难懂,但其实它和我们的生活息息相关。如果身边的人问我嵌入式是什么,在时间有限而对方又不是想要深入研究的情况下,我一般会这样回答“嵌入式可以通俗的理解为用软件来控制硬件以实现某种特定的功能”。但如果有人要我认真详细的通俗易懂的介绍一下嵌入式,那么我会从嵌入式工程师是干什么的这个角度出发,以一个嵌入式产品从无到有的过程为切入点,解释一下嵌入式这个行业。

我们身边的很大一部分电子产品,其实都是嵌入式设备。当然并不是全部电子产品,像我们的通用电脑(PC)就不属于嵌入式设备的范围,它们之间的区别可查看我的另外一篇博客。像一些功能较为单一的电子产品,也不属于嵌入式设备。至于如何区分它们,我后面细说。

《通用计算机(PC)和手机是否属于嵌入式设备(嵌入式的定义)-杂谈》
https://blog.csdn.net/L_0x0b/article/details/106497327

现在的电子产品内部都是一些电路板。复杂点的像我们的手机、电脑、机顶盒、游戏机、无人机、网络交换机、路由器、汽车的控制面板、扫地机器人。简单点的像老式电视机、电冰箱、空调、微波炉、电子手表、座机、蓝牙音响、U盘、读卡器、摄像头等。内部其实都是由一块或多块电路板组成的。

需要说明的是,像哪些电风扇啊,钨丝电灯泡啊这类的连板子都没有的并不是电子产品,它们属于电气机械邻域的产品了,一般意义认为电子产品是由电容电阻之类的元器件组成的。

《电子产品》https://baike.baidu.com/item/%E7%94%B5%E5%AD%90%E4%BA%A7%E5%93%81/10573839?fr=aladdin

而这块电路板都是由一堆电子元器件和一个或多个芯片组成。拆开手边的任何一个电子产品,里面都是这样的。而我们现在的高度发达的科技世界就是由这些电路板组成的。我们身边所有的科技产品都是这种电路板。


那么这块板是怎么来的呢?从无到有,想要说清楚这个流程。首先要知道,这个世界的分工是越来越细的了,这么一块电路板是由社会上面的多个国家多个领域多个公司多个岗位一起协作制造出来的。

目前来说这个世界上还没有任何一个公司能够独立生产出来一台手机。并不是技术上面不行,而是规模很难达到那么大,强如苹果仍然有部分技术源于外部。

这块电路板上面各式各样的元器件像电容电阻电感二极管三级管以及集成电路

以及还有一些其他的元器件如晶振,蜂鸣器,电感线圈,MOS管,各种传感器,例举起来就太多了这里就不细说了,仅电阻电容和二极管之类的由于参数和功能以及封装的不同就会衍生出几百上千种不同的型号来。其中集成电路依据不同的公司不同的功能又有几百上千种,一般认为四方形的周围或底下有引脚的都称为集成电路.CPU也属于集成电路的一种(CPU属于超大规模集成电路),广义上的CPU一般认为是个人电脑里面的CPU,所以集成电路也有另外一个名称——芯片。只是我们一般不把小型的集成电路称作芯片罢了。

《集成电路》
https://baike.baidu.com/item/%E9%9B%86%E6%88%90%E7%94%B5%E8%B7%AF/108211?fr=aladdin
《中央处理器》
https://baike.baidu.com/item/%E4%B8%AD%E5%A4%AE%E5%A4%84%E7%90%86%E5%99%A8/284033?fromtitle=CPU&fromid=120556&fr=aladdin
《芯片、半导体和集成电路之间的区别是什么?》
https://www.zhihu.com/question/26112127
《【零基础】一文读懂CPU(从二极管到超大规模集成电路)》
https://www.cnblogs.com/cation/p/11192289.html

这些硬件材料,一般由一些院校的科研机构和政府的科研机构以及一些行业巨头的大公司以及一些元器件的生产厂家在弄,他们负责研发出这些最底层的电子元器件以及集成电路来,也就是由科学研究界负责最底层的材料那一块。他们把材料研发出来了,然后把研究成果交给一些元器件生产厂家去生产这些元器件。然后一些做产品的公司就会去买这些电子元器件进行自己的产品开发和生产。

这里有三种情况,第一种是研发的公司委托生产厂家生产然后自己找客户出售,这种一般称为代工厂模式,这种一般适用于专用功能的集成电路。第二种是研发的公司研发成功后,经过宣传一些生产厂家购买其知识产权进行生产销售,这种一般适用于通用程度较高的集成电路。第三种是研发的公司自有生产线的,自己研发自己生产,这种类型的公司规模体量一般都很大。元器件生产出来了。一些经销商会大批量的从多个生成厂家那里进行代购,然后一些产品公司会从经销商那里统一采购产品需要的所有元器件进行产品的研发生产和销售。


但是单一的元器件是不能实现我们需要的功能的,我们需要把它们组合制作成满足各种各样功能需求的电路板才是一个成品。

现在基本的硬件材料有了,然后我们需要根据特定需求选择特定的元器件,并绘制原理图制作PCB板,该工作由负责硬件的工程师去完成。

该工程师在不同的公司里面由于细分的程度不同叫法不太一致,一般有硬件工程师、电路设计工程师、PCB工程师、嵌入式硬件工程师等等等等,搞软件的统一称他们为硬件工程师就对了。

硬件工程师负责把这些电子元器件组合起来绘制成原理图,他们绘制的电路板一般有两种,一种是带“控制芯片”的复杂电路,像电脑电视机遥控飞机平衡代步车等。一种是不带“控制芯片”的简单电路,像U盘读卡器充电器等。

不带“控制芯片”的电路比较简单,纯粹由电子元器件以及一些小型的集成电路模块搭建而成。而带“控制芯片”的电路板一般会比较复杂而且特征也比较明显,核心为控制芯片,外围电路均是围绕着核心控制芯片搭建的模块电路。


需要特别说明的是,为了便于理解,我上面提到的复杂电路简单电路仅仅只是一个相对概念而已,并不绝对的正确。事实上有一些不带“控制芯片”的电路也会比带“控制芯片”的电路复杂很多,这主要是由于带“控制芯片”的电路一般都是以低频电路为主。而一些由低频高频数电模电混合的电路即便不带“控制芯片”,但在设计的时候由于要考虑各个电路模块中的兼容性稳定性等因素,其设计的难度往往更高电路更复杂。事实上由于嵌入式电路的特征较为明显,所以大部分嵌入式设备的电路板都大同小异,且一些高端设备像基于ARM的A系列芯片产品还分为核心板和底板两部分组成,核心板则是由一些像高通三星全志华为海思这些公司设计开发的,硬件工程师只需要设计底板,从设计的角度看嵌入式电路反而是更加简单的。但总体而已,嵌入式电路还是会比绝大多数非嵌入式电路复杂。


当硬件工程师把原理图绘制出来了,现在原理图和PCB都有了,把他们交给PCB制版厂家就可以生产出电路板了。下一步就需要去采购原理图里面对应的元器件,然后进行检料与贴板。

检料就是把采购到的材料与PCB板进行二次确认,确认好参数、规格与封装与原理图上面是否对应。贴板就是把元器件焊接到电路板上面去,有时在测试阶段批量少时会人工贴,量产阶段批量大时则会采用机贴,做PCB制版的厂家就可以进行贴板。

在进行采购时,大部分元器件以及集成电路都会有很多供应商,但唯独“控制芯片”例外。由于研发生产难度较大,这个“控制芯片”是由世界上顶尖的几个公司合作设计制作的,也只有他们能够提供,并且一直处于垄断地位。

具体可参考我另外一篇博客

《嵌入式芯片与通用芯片(当前世界的芯片格局)-杂谈》
https://blog.csdn.net/L_0x0b/article/details/107361944


既然说这个世界上能设计生产芯片的公司那么少,芯片的设计制造难度又那么大。如果所有带控制的电子设备都需要一颗这样的控制芯片才能正常工作的话,那么仅仅靠这几家公司设计芯片,又怎么能满足几千上万种不同的电器使用呢?难道要为了电视机单独设计一款芯片,为了电冰箱单独设计一款芯片,为了智能手表单独设计一款芯片,为了电子门禁单独设计一款芯片?或者为了一个智能灯泡单独设计一款芯片?

这显然不现实,总共就那么几家公司,他们不可能专门为全世界所有智能电子产品都设计出特定的芯片来。其实他们生产的芯片功能都是一样的,都是处理指令、运算数据。根据指令的不同可以控制芯片处理各种各样的事情。而编写这些指令的工作,则是由程序员来做了。程序员可以通过编写程序下载到芯片中去指导这个芯片工作,同时控制着外围电路和传感器,以实现各式各样想要的功能。基于这个原理,一款芯片就能够同时适应很多不同的电子产品了(你能想象电冰箱和遥控飞机和智能手表里面的芯片甚至可能是同一款一模一样的芯片吗?只是这个芯片里面的程序和外围的电路图不一样而已)。

具体想要什么功能,生产电子产品的厂家自己编程写自己的程序进芯片里面,指导芯片工作,用来实现自己想要的功能。而这个按照特点需求写特定代码进芯片里面指导芯片工作的人,就是嵌入式工程师了。

为了便于理解,我上面一段的说法并不太严谨。首先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

写在后面

这篇博客写完后,接下来很长很长一段时间内我可能都不会再写这种概述类型的文章了,实在是耗时太长,精力耗费太大了。这篇博客和我前面两篇博客《嵌入式芯片与通用芯片(当前世界的芯片格局)-杂谈》《通用计算机(PC)和手机是否属于嵌入式设备(嵌入式的定义)-杂谈》其实是同步写的,或者说这三篇一开始只是一篇最后被我拆分成三篇发布而已,我平时利用空余时间两周可以写一篇博客,但这三篇加在一起足足耗费了我两个多月的空余时间。
而且期间各种折磨各种没思路想放弃写不下去。它们不同于那种教学类型的文章以及那种介绍某个知识点的文章。有比较清晰的脉络可以然你像填空似的逐步完善各个段落各个小结。这种类型的文章本身就没有一条完整的脉络,想要写只能自己制造一条脉络(就像我文章里面的脉络就是“一个电子产品的从0到1”),然后依据这条脉络去写。
没有脉络想到什么写什么也是可以,网上有些文章就这么写的。不过一篇没有主线没有脉络的文章看起来是很费劲的,特别是这种概述性的文章。一篇好的文章应该是能够让读者在不知不觉中跟着作者的思路一直走到最后。并且从中了解到作者想要表达的所有东西。我文中引用的参考文章很多都能做到这点,以前没写过这种类型的文章时看觉得没什么,现在写完这几篇文章之后实在是佩服的五体投地。
有了基本脉络之后,还只是第一步,因为你想要表达的东西不一定都能很好的契合到这条脉络中去。不能写着写着突然插进来一个毫不相干的知识点来,要考虑好上下文之间的关系过渡。但你把这些都处理完了,但还只是文章的整体架构而已。
写的过程中你还要时刻注意你写的东西的准确度,总不能误人子弟,胡谝乱造,要对说出来的东西负责。你又要不断的去找相关资料,看一大堆文章(即便我写这三篇博客之前已经有一个大概的了解了,但期间为了确保文章的准确性,看的文章也至少在50篇以上,文中引用出来的文章只是其中比较好的而已)。做到这些还不够,最后在写的时候还要想方设法的尽量用通俗易懂的语言来写。期间各种删删改改,不断的重新组织语言,不断的重写。
说了一大堆,只是想发泄一下而已,最近写这几篇文章真的要疯掉了我。写这种文章真难为我这个作文都写不好的理科生了。但没写之前我也不知道我之前为什么想要写这种类型的文章,虽然整体写完确实让我学到了很多以前不是特别了解的东西。但从现实的角度说,这些提升的东西对我的编程能力提升没有半点作用。远远没有写那种对于语法知识点,代码分析之类的博客对我的提升大。而且这两个多月来,为了写这几篇博客反而很耽误我学习新的编程知识。但不写都写完了也就这样了。可能是想要把我在这方面了解的东西做个总结吧。又或者可能如我的个人简介上所说的一样吧。


零BUG是原则性问题。

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值