面向未来的嵌入式系统——狭义与广义的对决
前言
曾经在大一时,非常迷茫自己所学的专业到底是在学些什么,虽然在填报志愿时,了解到嵌入式的应用场景非常广泛,但是是做机器人?物联网?还是一个简单程序猿?并没有一个确定的答案。一个个问题的抛出外加自己的好奇心,让我不得不努力在所学的课程中与一些课余的交流中寻找答案。通过大二上期廖老师对于嵌入式系统导论这门课的讲解、熊春学长的《嵌入式实操路线》讲座以及自己所了解的一些内容,我想自己已经渐渐有能力从自己的视角来谈一谈到底什么是嵌入式系统?狭义与广义的区别到底在哪里?关于嵌入式未来的发展趋势已包含在文章《寒冬0R浪潮?——互联网行业跨界融合我之见》一文中,故此不再赘述。
什么是嵌入式系统?
引用百度百科中有关嵌入式系统的定义,“嵌入式系统(Embedded system),是一种‘完全嵌入受控器件内部,为特定应用而设计的专用计算机系统’,根据英国电气工程师协会( U.K. Institution of Electrical Engineer)的定义,嵌入式系统为控制、监视或辅助设备、机器或用于工厂运作的设备。”通俗的讲,我们所接触到的所有内置了嵌入式芯片的、可编程进行特定工作的设备,都可以称之为嵌入式系统。
在理解嵌入式系统概念时,往往都会伴随着一个有趣的小问题,你的家里有几台电脑?一般来说,我们的正常思路是根据家中的PC数量计算拥有的电脑数量,然而,实际的答案比我们想象中的差异大得多。
一般我们对于计算机的理解建立在冯诺依曼体系结构的基准之上,通俗地认为含有控制器、运算器(与控制器合称中央控制器,即CPU)、存储器(内存、硬盘)、输入设备(键鼠)、输出设备(显示屏)才能称之为电脑,但还有一些并不像传统计算机的“长相”的设备,也可以称之为电脑,比如我们随身携带的手机、家中的空调、电视、洗衣机等等。而正是这些“长相”不太传统的设备,与PC一起,组成了现代计算机技术的两大重要分支——嵌入式计算机系统与通用计算机系统。
什么软件工程中的嵌入式系统?
这里便涉及到题目所描述的狭义与广义论断了,由于此处产生了较大的观点碰撞,我会将他们一一列出,供大家讨论。首先我先来介绍一下我自己对于这个问题的观点,在我看来,广义的嵌入式系统即为上文所说的,一套涵盖了软件和硬件的嵌入式设备。而狭义的嵌入式系统,则特指嵌入式设备中的操作系统。我们可以用两个公式来解释:
generalized ES = CS+EE narrow-sense ES = EOS
举个例子,我们可以说一部安卓手机是一个嵌入式系统,也可以说安卓这个操作系统是一个嵌入式系统。这就解释了为什么软件学院里仍会开设嵌入式系统专业并重点学习对于各种主流嵌入式操作系统如Linux、uc/os的使用、移植等内容。
而这种观点的理论基础源自“嵌入式系统是建立在计算机技术的基础之上的”这句话。但通过查阅一些资料,我发现,嵌入式系统真正的起源是半导体集成电路,早期的嵌入式工程师来源于电子技术应用工程师,而当时计算机领域与嵌入式领域还没有发生交叉,嵌入式开发仍然按照电子技术应用模式进行开发,缺少计算机工程设计方法。后来,由于后PC时代的到来,网络、通信等技术得到较快发展,大量计算机专业人士涌入嵌入式领域,将计算机工程设计方法与设计规范融入到嵌入式开发当中,才有了现在的嵌入式系统。
也就是说,嵌入式系统并不只是建立在计算机技术的基础之上的,而是多个领域,多个学科结合的基础之上的,并不能单纯地与计算机学科归为一谈。这样看来,嵌入式的软件、硬件是密不可分的,所以无论是电子专业的嵌入式还是软件专业的嵌入式,都需要了解对方专业在嵌入式中所需要的知识和扮演的作用。
嵌入式系统到底要学些什么?
在此我们先以广义的嵌入式系统学习为例,介绍一下我所接触到的嵌入式所包含的学习内容,通过对于学校微固、电工、机电、信软等部分学院的部分专业的培养方案进行分析,我花了半个中午的时间制作了如下的一幅知识框架图:
面向未来的嵌入式系统——狭义与广义的对决由于只是根据自己目前所了解的内容进行制作,碍于视野和有限的理解力,很多内容还很不完善,如果大家对于框架有更好的改进建议,请予以指出。
嵌入式系统的学习路线是什么?
在这里我引用了廖老师PPT中软件工程的嵌入式专业学习路线作为本节的内容阐述。
面向未来的嵌入式系统——狭义与广义的对决首先我们应当对什么是操作系统有一个大致的了解,同时了解到单片机+裸板开发与开发板+板级操作系统的区别,之后了解嵌入式开发的工具,会配置嵌入式开发环境,在嵌入式开发环境下完成第一个经典程序Hello World的编写(或者从电子开发者的角度是通过编程点亮第一盏LED灯),然后独立完成一个APP软件的开发(或者一个嵌入式电设小作品),能够完成简单的驱动程序的编写(此时可以尝试了解嵌入式开发中的I2C、SPI、串口等传输协议),接着完成复杂的驱动程序的编写(可以尝试对复杂传感器进行驱动,并对收集的数据进行解码),然后学习BSP板级支持包,为之后的操作系统移植做铺垫,完成操作系统的移植后,继续练习对整个嵌入式系统软件的设计工作,随后进阶嵌入式硬件设计,最后完成整个嵌入式软硬件的无缝对接。
到了这个阶段,基本已经掌握了嵌入式系统的精髓所在,之后便可以随心所欲的进行开发,而类似机器人、物联网等这些技术,此刻也不再神秘,最终成为了创客们手中玩转的酷科技。同时,核心技术掌握之后,也即是心仪的Job到来之时,但是如果还不满足的话,更可以像乔帮主一样,把嵌入式做到极致,成为一个领域的神话。
有哪些可以上手的嵌入式小项目?
详见博客http://blog.sina.com.cn/s/blog_a10d85160102w030.html
后记
无论是狭义还是广义,软件还是硬件,终究只是一个名词释义的区别。一个好的嵌入式工程师没有十几年的经验积累,是无法做出好的产品的。所谓软件或硬件专业中的嵌入式,只是在侧重点上有所不同。在浩瀚的嵌入式开发知识海洋中,找到自己的兴趣所在,在对应的领域里有所建树,才是最适合自己的那条路吧。
参考文献
[1] 何立民.嵌入式系统定义与发展历史 [J]. 单片机与嵌入式系统应用,2004(1).
[2] 张玢,孟开元,田泽.嵌入式系统定义探讨
[J].单片机与嵌入式系统应用,2011(1).