2017嵌入式软件行业现状及概述

[阅读原文]:超长文预警

导读:
本文章介绍了截止2017年为止的嵌入式软件行业现状,包括就业方向,行业产品类型,待遇等等。另外还简单概述了下嵌入式软件所需的知识技能以及未来可能的技能发展走向。本文章远不如专业的行业报告一般精准、专业,仅仅是根据个人见闻来提供一个比较整体的嵌入式软件行业印象,抛砖引玉,以供参考。(文末有2017年集成电路行业薪资表哦)。

嵌入式软件定义

嵌入式软件

其实嵌入式软件这个名词还是比较难以准确定义的,一般把“用于控制、监视或者辅助操作机器和设备的装置”称为嵌入式系统,系统包括一系列软硬件设施等,而嵌入式软件姑且可以认为是嵌入式系统的软件开发这部分。比如:手机的系统开发(Android、IOS等),无人机的系统控制软件、驱动开发,路由器的软件系统开发等等。广义上,可以把单片机(STM32)、SOC等等硬件构成的控制系统中软件开发部分都称之为嵌入式软件开发。

嵌入式系统架构

硬件

硬件架构以ARM为主,有很多人可能分不清ARM这个单词到底代表什么意思。感觉好像很多地方都有ARM这个词,而且意思还不甚一致,这里稍微解释下。

  • ARM公司
    首先ARM是一家英国公司(全名Advanced RISC Machines),于1991年成立英国剑桥,由苹果、诺基亚等等合资成立,主要业务是出售芯片设计技术的授权,也就是常说的IP,它的盈利方式有点类似于高通,但是高通有很大一部分收入来自于专利墙,从这点来说ARM还是差了不少。ARM的IP包括物理IP(嵌入式内存IP、逻辑IP、接口IP等),图像与多媒体(熟悉的Mali系列GPU以及video、显示等),其它还有系统IP(CoreLink(核心)连接内存控制器、CoreLink(核心)连接系统控制器、TrustZone安全IP),无线IP等等。
  • ARM处理器
    一颗SOC包括处理器内核、GPU(可选)、各种片上外设(USB、I2C、ISP等等),嵌入式领域的SOC处理器内核主要就是ARM、高通(Kyro等)、还有苹果的。前期ARM的处理器型号有ARM7/9/11,例如熟悉的三星的S3C2440就是ARM9的处理器内核,这是比较早期的架构了,从ARM11开始就分出了三个不同的分支,现在我们最熟悉的是ARM公司的三种不同系列的处理器,Cortex-A/R/M系列。
    • Cortex-A:主打高性能,为各大嵌入式操作系统(Linux、Android等)提供基础硬件,常见于手机、平板、IPC等嵌入式设备。最新有A75、A53等等,再往前有A7等,像联发科的最新X30处理器用的就是双核A75、四核A53、四核A35。高通的处理器芯片早期是Krait,从820开始转为Kryo架构,与ARM的处理器架构有所区别,不过其指令集用的还是ARM指令集。
    • Cortex-R:主打快速响应,用于实时性要求强的场合。这一系列并不像M/A系列那样为人熟知,它通常用于硬盘控制器、网络设备或打印机、汽车控制系统等。
    • Cortex-M:更小、更低功耗,用于离散处理与微控制器。常见的使用该系列处理器内核的有K60(飞思卡尔用的较多,有Cortex-M3/M4等),STM32(工业控制用的较多,有Cortex-M0/M3/M4等),像有些比较熟悉的产品中都用到了STM32,比如米家的小米扫地机器人(全志R16-CortexA7,STM32F103-CortexM3),大疆无人机(很多个STM32联合使用)。
  • ARM指令集
    ARM指令集是ARM平台处理器的操作指令系统,指令集定义了数据处理、加载、处理与存储等等一些系列指令,有了指令集,处理器才能按照特定的要求去执行相关的动作,完成指定的操作。ARM的部分指令集版本与部分处理器版本的对应关系表如下表:
指令集版本 处理器版本
ARMv1 ARM1
ARMv2 ARM2,ARM3
ARMv3 ARM6,ARM7
ARMv4 ARM7TDMI,ARM9TDMI
ARMv5 ARM9E,ARM10E
ARMv6 ARM11,Cortex-M
ARMv7 Cortex-A/R/M
ARMv8 Cortex-A50
  • 架构
    • 哈佛架构
      一种将程序指令存储和数据存储分开的存储器结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。用到哈佛架构的处理器有ARM9/10/11以及之后。

2017嵌入式软件行业现状及概述
冯诺依曼架构

软件

嵌入式行业的软件系统众多,包含操作系统、图形UI系统等等,其中较为常见的有Linux、RTOS类、Android、QT等等,下面根据不同的类型选取几个较为常见的软件系统进行简要概述。

  • 操作系统

    • 非实时操作系统
    1. linux:也有实时的linux系统,这里不做介绍。嵌入式里面应用最广泛的非实时操作系统非linux莫属,小到智能手表,大到汽车电子等等都有linux的身影。该系统于1991年由芬兰的linus torvalds实现,经过多年的发展已经成为功能极为强大的成熟的操作系统,并且源代码完全公开,商用完全免费。

    2. WinCE:(Windows Embedded Compact),微软出品,有着比较强大的图形用户界面,专门为掌上电脑以及嵌入式设备设计。WinCE的实时性比linux更好一些,但是相比linux来说,它的可裁减、可移植性都弱了不少,并且linux拥有来自全球黑客的共同协作开发,从某方面来讲它的开发支持力度要比WinCE大。核心源代码开放,但是GUI不开放,商业使用需要一定费用。

      现在在嵌入式消费电子领域,linux的占用量比WinCE要大,linux的开发者也比WinCE要多,相对来说,linux的职位、市场需求比WinCE要大,也就是说,学linux更容易找到工作哈。

    • 嵌入式实时操作系统(RTOS)
    1. FreeRTOS:创始人RichardBarry,该操作系统是一个轻量级的实时操作系统,功能包括任务管理、内存管理、信号量、队列、软件定时器、协程等,在FreeRTOS官网:http://www.freertos.org/,这里可以找到任何FreeRTOS的学习资料与源代码。

    2. μC/OS:(Micro-Controller Operating System)截至目前,最新版本出到III,该系统前两个版本是完全开源的,第三个版本不完全开源,虽说源代码是开源的,但是如果要用于商业用途的话是要收费的(但是据说个人创业者免费,这个都要跟官网的协议进行同步确认),不过目前来说该系统的最新版本还是比FreeRTOS的功能更加强大一点,不过没有前者更加轻量。该系统是一个可以基于ROM运行的、可裁剪的、抢占式、实时多任务内核,具有高度可移植性,适用于微处理器与控制器。

    3. VxWorks:该系统其实在消费类的嵌入式产品中并不是很常见,但是在军工、航天、自动化系统中比较常见,该系统拥有强大的开发套件与开发调试环境,其严格的测试流程保证了系统有着较高的稳定性,实时性较linux强太多。不过该系统的授权费用极为昂贵,各种组件都是单独拆开分别进行授权。该系统的入门较linux更为简单,但是网络上的资料极其少(估计是不开源的缘故),所以普通的智能家居、安防、消费电子产品领域,还是linux占大头,该系统则用于一些实时性、稳定性要求更高、对成本不是过于敏感的场合,比如航空航天、军工之类的设备上面。

      上述前两个系统都可以运行在类似STM32以及ARM7/9内核处理器上面,从商业角度来讲,如果追求免费轻量可以使用FreeRTOS,如果追求功能的完备性,可以使用μC/OS。当然也可以作为个人学习使用,对于个人来说,两者都有可供获取的完整的源代码,并且免费使用,网络上(包括各自的官网)也有很多的学习资料可供选择,嵌入式学习是FreeRTOS以及μC/OS会是个非常不错的选择。有些四轴飞行器上面就有用到FreeRTOS,前两个实时操作系统对硬件的要求没有VxWorks高,在一些较为简单的、低成本硬件系统中使用前两者是一个不错的选择。

  • UI

    • QT:跨平台的C++图形用户界面应用程序开发框架,于1991年由QT Company开发,可以用于开发GUI程序,先后被诺基亚与Digia收购。具有强大的跨平台普适性,可以支持windows、mac、ios、android等。在传统软件与企业应用领域用的较多。
    • Android:Android是基于linux内核开发的一套GUI系统,由google公司完成,目前为止出到Android O(8),现在有非常多的平板、盒子、手机都用到该系统,如果说以前的Android系统还不是那么好用,那么从6.0开始,到最新的版本已经非常好用了,当然,这个跟很多因素也有关,不仅仅是系统本身的进步。该系统是开源免费用于商业的,同时不是跟linux内核一样使用GPL协议,通过HAL将linux内核与上层framework隔开,既使用了linux内核,同时又保证了android相关的厂商不受GPL协议(产品用拥有到GPL协议的代码,则产品的代码也必须完全永久开源免费)的传染性所影响,保证了商家的利益,也为该系统的推广普及铺平道路。

关于Android系统:在初始的时候是google搞出来跟ios相爱相杀的,话说google有时候就是喜欢搞事情,谷歌做的很多项目起初完全就是没有奔着赚钱去的(谷歌公司的特性决定了它可以这么任性),android起初可能就是这样一个项目,只不过最后成功了。早期的android系统都说比较卡,这与几个方面有关:

  1. android的策略:android对屏幕的响应级别是比较低的,ios是优先响应屏幕事件。
  2. 系统碎片化严重:这个碎片化不是指内存碎片化,由于使用android系统的厂商众多,如小米、华为、三星等等,还不算无数“山寨厂商”,它们的屏幕大小,硬件都不甚一致,所以一个android程序或者android系统本身就需要适配如此多的硬件平台,这就注定要牺牲某些性能而导致系统的不流畅,更不用说有些厂商的硬件配置本身就跟不上,不像ios一样,硬件配置高,并且硬件风格极为统一。
  3. APP参差不齐:android系统本身的开放性,使得大量质量不合格的app运行与系统当中,而有的app干脆用常驻后台,开它个7、8个后台线程来满足自己的“特殊需求”,这也是跟国内用不了谷歌有关,ios的app有统一的发布渠道、统一的审核,这些都要比android规范很多。

不过现在android已经比以前好多了,系统碎片化的问题虽然还有,但是在慢慢规范,这个也与国内手机厂商的崛起有关,硬件配置慢慢跟上,app慢慢规范化、统一化。

IC设计

嵌入式有一个完整的上下游产业链,以手机为例,整个产业链的简要图示如下所示(当然省略了很多中间步骤,简化说明):

2017嵌入式软件行业现状及概述
2017集成电路行业薪资表

轶事

我最早接触嵌入式算是大学二年级,那个时候做过飞思卡尔、全国电赛等等。我参加的是第十届飞思卡尔智能车竞赛,等到了第十一届的时候飞思卡尔被恩智浦收购了(那一届叫恩智浦杯),而等到再往后恩智浦又被高通收购了(又改回飞思卡尔),现在想想也是有点感慨。

git编写者也是linux系统的创造者linus(太牛逼了),github是基于git的一个代码托管网站,linus本人也进驻了,有自己的代码仓库,在里面可以看到linux、git最新版本的源代码(代码世界的两大顶梁柱级别的工具),而github也慢慢发展为最受欢迎的开源代码托管网站以及社区。最初linux是被自由软件基金会GNU选中作为其开源软件的一员而慢慢发展壮大(也算是一部分机缘巧合),GNU致力于软件的开源、免费,是真正的永久开源、免费,这个相比对于各大码农来说是非常友好的,也是一大部分码农向往的愿景,像GCC,Emac,gdb等等牛逼的软件工具都出自于GNU这个组织。

ARM近年来也在开发一项技术,叫做ACP,这个技术可以使得IC上面的外设可以不通过CPU即可相互访问对方的内存,想下DMA吧,ACP要做到不止于DMA,当然这项技术什么时候、能否问世还有待商榷。


如果觉得本文章不错,请关注微信公众号-YellowMax多多支持,查看更多文章
欢迎转发、关注、点赞一波
2017嵌入式软件行业现状及概述

来源:嵌入式Max

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年10月3日
下一篇 2017年10月3日

相关推荐