嵌入式操作系统与物联网演进之路

技术标签: CSDN物联网开发  操作系统  物联网  近匠  嵌入式开发  

文/屠敏

物联网是新一代信息技术的重要组成部分,回顾其发展,其中不得不提的必然是嵌入式系统。传统的嵌入式系统与互联网的发展衍生出物联网,而在如今的物联网热潮之下,嵌入式系统也面临着全新的机遇与挑战。那么,两者的碰撞融合究竟会带来怎样的火花?对于传统的嵌入式开发者,我们应该如何改变应对新格局?在此我们采访了著名的嵌入式系统专家何小庆,跟他一起探索嵌入式操作系统与物联网演进之路。

何小庆,著名的嵌入式系统专家,国内最早涉足嵌入式 OS 者之一,创办了北京麦克泰软件技术有限公司,有 30 年嵌入式技术和市场经验。他还是中国软件行业协会理事、嵌入式系统分会副理事长,嵌入式系统联谊会秘书长。出版有《嵌入式操作系统风云录:历史演进与物联网未来》,《嵌入式实时操作系统μC/OS-III 应用开发》和《嵌入式软件精解》等多本著作和译著。

以下为采访实录:

CSDN:请您介绍一下自己以及目前所做的事情?

何小庆:我于 1991 年北航计算机专业研究生毕业,之后在研究所做科研式项目,到 1995 年,开始从事嵌入式相关的工作,并创建了北京麦克泰软件技术有限公司。2009 年之后,在北航出版社旗下的《单片机与嵌入式系统应用》杂志方面担任副主编,现在是编委会副主任,后来也在北航的电子信息学院和软件学院授课,。目前我一方面负责企业中的部分工作,另一方面从事杂志和教学工作。

CSDN:在您这么多年的从业过程中,您如何提升自己的技能?

何小庆:第一点,与时俱进。开发者身处 IT 产业之中,而我们知晓如今的 IT 产业最大的一个挑战的就是技术的日益变更,更新速度很快。嵌入式和物联网行业实际上也一样,虽然没有如 IT 产业的变化这么快,但是想要成为一名优秀的开发者,必须得与时代共同进步学习。因为短则十年前,你掌握的技术知识,在如今的项目可能都不会使用了。

第二点,技术与产业应用结合。因为嵌入式系统本身跟物联网系统一样,它是面向于产业应用背景的,平时所说的物联网概念,只有将其放在比智能交通、智能家居这些产业中,才会发挥作用,更好地体现出来。因此必须要把你的技术和产业应用结合起来,这样作为工程师,才能将最大的价值发挥出来。

物联网与嵌入式系统的碰撞融合

CSDN:与早年相比,嵌入式操作系统最大的不同是什么?

何小庆:嵌入式操作系统因为物联网技术和应用之后,又重新被很多人关注起来,同时嵌入式系统也发生了一些变化,主要有两个方面:

  • 今天的嵌入式操作系统要关注物联网的底层技术,比如传感器的节点,以及一些我们称之为小型的通讯网关,这些节点在以前是不适用嵌入式操作系统的。但是现在因为物联网要具备联网的特点,,所以嵌入式操作系统就要往这个方面去深入发展,即往下。
  • 其次嵌入式操作系统是要往上走。嵌入式操作系统的用武之地,一个是网关,还有一种是带有人机界面的设备,因为手机流行以后,大家都希望有一个非常好用的人机界面的操作方式;再往上发展即我们所说的云计算和人工智能,最典型的无人驾驶车,在这个里面大量的使用了嵌入式系统和嵌入计算技术。

向下的嵌入式操作系统里面主要是实时的操作系统,如我们所说的 RTOS,应用的机会就会很大;向上的话,如 Linux 应用的机会就会很多,开源是主流。

CSDN:您认为嵌入式开发的学习应该怎么如何开始和深入?

何小庆:软硬结合是嵌入式系统的一个最大的特色。正如程序员学习 Java 编程需要有个 PC ,或者智能手机,智能手机可以说是嵌入式设备也可以说不是,它是计算机平台的。而物联网和嵌入式系统开发真的不太一样,想要开始嵌入式和物联网的开发,个人的建议是,首先需要有一块开发板,如 STM32,这个是最流行的,价格也很便宜,或者找个树莓派,然后再找到相应的一些开源的软件、编程工具,或者是 Linux 操作系统,然后就可以开始学习了。

逐渐深入的话,大家可以按照物联网的一些应用场景来学习。因为物联网的话,至少要有传感器,如温度传感器、湿度传感器,然后结合开发板,将传感器加进来,其次再去找一个通讯模块,比如说蓝牙、WiFi,和开发板连起来,或者有了如树莓派这样的开发板,已经有了 WiFi 了,那就不需要了。大家可以试着做一下这种应用,把数据采集下来,然后进行数据的处理,再发到的智能手机或者云端,智能手机一般是比较容易的。

CSDN:如今物联网与云计算的技术应用越来越广泛,嵌入式系统行业如何面对这样的机遇?

何小庆:如今的物联网后端有云计算,也开始有大数据,在此之后,就是人工智能,这些对嵌入式系统的影响已经逐渐都展开了。从中国来讲,我们也算是倡导物联网最早的国家之一了。这些对嵌入式系统绝对是个机遇,因为就是物联网这扇门开放之后,物联网的发展就会越来越宽。而最初嵌入式系统是个单品,比如大家可见的控制器,它的程序是固定的写好的,按照程序员的要求,它经过编程设置好了,那么嵌入式系统从单品到后来发展成一个系统,就相对复杂一点,那个时候我们很多嵌入式系统是要通过 PC 把消息系统的数据展示出来,或者我们可以实现一个分布式的控制系统。物联网之后,嵌入式系统最大的变化就是将系统再往上面发展,即以服务的模式去发展,其体现出来就是曾经在 PC 上展示出来的数据,现在展示到云端和智能手机上了。嵌入式系统面临的机遇,就是我们要把原来的单品,变成系统,而且这个系统将来面向服务的。

CSDN:您认为物联网的发展经历了哪几个阶段?

何小庆:我对于物联网发展阶段的理解,非常赞同英国格拉斯格大学 Duncan 博士看法,他把物联网比喻成是一棵树,认为物联网发展可以分为三个阶段:第一个阶段是个打基础的阶段;第二个阶段是培养的阶段;第三个阶段是收获的阶段。各个国家物联网发展的进程肯定会不大一样,我认为中国目前是在培养的阶段,,但是距离我们可以有收获的阶段也应该很快了,现在树上可能已经结了一些果子了。

CSDN:ARM、谷歌、微软、华为、阿里、庆科等国内外公司纷纷推出物联网操作系统,在这个诸侯争霸时代也暗示最终只有少数会成为主流,您认为一个好的物联网系统应该具备哪些特性?

何小庆:最后能剩下的操作系统也就只有少数的几个,因为不需要那么多,如手机和 PC 系统一样。那么关于一个物联网操作系统需要具备以下技术特征:

  • 管理物的能力:从嵌入式系统视角看,“物”是网络上发送和接受信息的一个个嵌入式计算小设备(或称为深嵌入式系统),比如家庭或者工业现场的智能传感器。现在嵌入式系统设计的一个共识就是降低功耗,常见的方法是系统尽可能快地执行,然后立即进入睡眠模式。现在的处理器核心架构,在低性能状态下,可以做到基本上不消耗任何电力。

  • 可伸缩和扩展性的架构:随着 32 位 MCU 的价格下降,Linux 又无法支持没有 MMU 的 MCU,RTOS 理所当然地成为运行在 MCU 的物联网 OS 的首选,原因是基于 RTOS 的设计运行更灵活和可扩展的软件运行在这些系统中。

  • 泛在互联网功能:支持物联网常用的无线和有线通信功能,比如支持 GPRS/3G/HSPA/4G 等公共网络的无线通信功能,同时要支持 ZigBee/NFC/RFID/WiFi/Bluetooth 等近场通信功能,还要支持 Ethernet/CAN/USB 有线网络功能,以及广受关注的窄带通信技术 NB-IoT 和 LoRa。在这些不同的物理和链路层接口之上的协议之间要能够相互转换,能够把从一种协议获取到的数据报文,转换成为另外一种协议的报文发送出去,最后要能够迁移到互联网协议。

  • 系统的安全性:物联网设备中很大一部分是使用 MCU 和资源有限的微处理器,与大型设备相比,这些小型设备更容易保护,不易受同类型威胁的攻击,更安全。

  • 云计算后台:物联网设备区别于传统的设备的标志就是这些设备将产生海量的数据,如何管理和处理这些数据是摆在物联网企业面前的一个难题,云计算无疑是解决这个难题的最有效的技术手段。选择支持物联网系统的云计算平台需要考虑一下的技术因素:

    1)支持云计算和物联网协议(Websocket、RESTful、MQTT 和 CoAP 等)。
    2)灵活的标准和设备管理方式。
    3)支持安全的远程固件升级。
    4)Web/移动应用开发的能力。
    5)高效和可靠数据存储能力。

  • 先进的编程语言:用于传统的嵌入式系统的编程语言多数是 C 和 C++。因为物联网设备的特点,互联网编程技术将进入物联网设备,优化后的互联网编程语言可以低功耗的 MCU 上运行,比如 Java、Javascript 和 Python。需要注意的是, Java 总是运行在操作系统之上,所以你的选择不是 C/C++ 或 Java 两者之一,而是 C/C++ 和 Java 都会使用。

但是物联网操作系统就是具备了以上的六个特征,也未必会有人用,所以怎么能做得好?我认为做好一个物联网操作系统,生态环境建设的要放在一个重要的位置上,一定要让人能够去愿意去用它。另外现在的物联网操作系统中有一个很大的问题是,搭建的生态的环境还不够丰富,大家还没有意识到或有迫切性认为,现在要开发一个物联网的项目,就一定要需要用一个物联网的操作系统,需求不太强烈。因此一个好的物联网操作系统一定要去打造生态环境,让更多的人了解继而使用。

CSDN:随着设备在医疗、航空、交通等重要领域的应用,安全、隐私和可靠性成为嵌入式系统最重要的问题,对从业者来说,在这些领域,有哪些特殊的规则和标准需要遵循?

何小庆:安全现在非常的重要,也受到更多人的关注。物联网前段时间也发生由于黑客操纵木马机制,导致物联网的设备域名无法解析。“安全”这次词英文有两种:security 和 safety,security 更多的是指信息安全,比如说物联网安全,safety 是与安全和可靠性相关。以上这两种安全对于我们目前这个领域的从业人员都要关心。现在在一些重要的行业中已经有相关的功能标准,那么从业人员可以去学习和遵循。如在轨道交通上用的比较多的 IEC 61508;在汽车工业上用的比较多的为 ISO 26262,这些标准都定义了你所开发的软件,包括整个系统、功能模块,应该遵循的规范。作为开发工程师,想要把控好安全的问题,可以从编程开始。嵌入式一般是用 C/C++ 语言来编程,那可以先去学习 MISRAC,学会如何书写的更安全可靠 C 语言代码。

CSDN:作为开发者,想要物联网开发,首先要学嵌入式吗?对于入门级开发者,常见的误区有哪些?

何小庆:“想要物联网开发,首先要学习嵌入式”这个观点是正确的,嵌入式是物联网开发的基础,现在各大高校的自动化、计算机、电子信息等这些专业中,都有嵌入式的课程。也有不少学校开设了物联网专业,其中也有大量的嵌入式的课程。但是并不是所有的从事物联网系统开发应用的人都要懂嵌入式,因为物联网是一个系统,它有传感器、网关,即为就是我们计算的部分,它后面有手机 App、服务器,假如你正好是只是从事手机 App 开发的,或者服务器端开发的,那就不需要深入了解嵌入式系统的知识,你只要知道嵌入式的设备是如何跟你的手机和服务器进行通讯的,比如蓝牙通讯协议,你只要知道这些通讯协议基本原理就可以。

CSDN:如果传统的嵌入式工程师想要拓展转型物联网方向,需要掌握哪些技能?

何小庆:从自身这些年从事一些物联网的项目和教学的经验总结起来,我认为想要转型至少应该具备以下三个方面的技能:

  1. 无线通讯。因为原来的嵌入式系统是个单品,通讯可能就是个串口,这个是有线的。而现在物联网多数都是无线的,所以开发者必须要掌握一种无线通讯的技术,比如蓝牙、WiFi 等,在嵌入式系统编程学会如何能够通过这种无线通讯协议把你的数据给送出去。
  2. 手机编程技术。以前的嵌入式系统的开发者只关心在设备端编程,比如 MCU 的编程,现在嵌入式系统一定要会一种手机的编程技术,比如 Android 编程。你不一定是个 Java 的编程专家,但是你应该能够看懂手机端编程的代码,对它可以进行一些小的修改。因为现在很多物联网的设备,它是与手机进行通讯的,比如智能家居的一些产品。
  3. 传感器的接口驱动和算法。传统的嵌入式系统工程师不太涉及到这个领域,现在每个物联网的设备几乎都带着传感器,那么这种传感器的使用、驱动程序以及一些简单的算法该怎么编写。这些嵌入式的工程师应该要掌握这一点。

CSDN:关于嵌入式物联网行业的未来发展,您什么期待?

何小庆:回到物联网的打基础、培养、收获的三个阶段来讲,中国目前是在一个培养阶段,培养阶段最大的好处就是百花齐放,百家争鸣,机会很多。对于这些从事于这个领域的工程技术人员,无论是创客还是传统行业,都有机会,所以我是希望年轻的工程技术人员可以结合自己的现在所学、所用、所做,同时借助于物联网这个参天大树,找寻发展机会和发展空间。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tangxiaoyin/article/details/71191817

智能推荐

业务流程管理的基本概念_peterzeng20210530的博客-程序员ITS304

业务流程(business process)是一种现实世界中的活动,它由一系列逻辑上相关的任务组成。如果根据恰当的顺序和正确的业务规则来执行这些任务,就可以产生业务效果。我们在“需求抽取与业务建模”一章中定义的需求过程,就是一个典型的业务流程。业务流程管理(Business Process Management,BPM)关注的是组织如何识别、建模、开发、部署和管理业务流程(其中也包括 IT 系统与

MinGw 和 cygwin 的区别和联系 (跨平台 windows运行linux程序)_whatday的博客-程序员ITS304_mingw64跨平台

1. windows与Linux操作系统的不同 windows和Linux是目前来说最流行的两大操作系统,在基本设计概念上,进程、线程、寻址、内存管理等方面都是大同小异的,但是二者之间的程序不兼容,因为二者在系统功能上是不同的,提供的系统API也是不同的。从最明显的几点来说:可执行文件的格式,Windows采用的是PE的格式,要求以.exe为后缀名,而Linux使用的是elf...

算法竞赛入门经典 暴力求解法 简单枚举 7.1.4 双基回文数_hongiii的博客-程序员ITS304

问题描述:如果一个正整数n至少在两个不同的进位制b1和b2下都是回文数(2                   输入正整数S样例输入:1600000样例输出:1632995分析:最自然的想法就是:从S+1开始,依次判断每个数是否为双基回文数,而在判断时要列举所有可能的基数(2~10),一切都是那么的”暴力“。然而令人意外的是,这样做对于S附上实现代码:

大一c语言期末作业飞机大战,用了easyx图形库_shurima_soul的博客-程序员ITS304

编译环境是vc6 高版本vs可能在有的地方会不兼容写的很渣,大神勿喷飞机由鼠标移动控制,鼠标左键开火会随机生成五种不同的敌人,这五种敌人除了外观不同以外,血量也不同当飞机遇到 S 后会增强武器代码如下#include <stdio.h>#include <Windows.h>#include <graphics.h>#incl...

成功解决IndexError: index 14 is out of bounds for axis 1 with size 14_一个处女座的程序猿的博客-程序员ITS304

成功解决IndexError: index 14 is out of bounds for axis 1 with size 14目录解决问题解决思路解决方法解决问题IndexError: index 14 is out of bounds for axis 1 with size 14解决思路索引错误:索引14超出轴1的界限,大...

JavaScript学习手册八:JS函数_●圆圈○的博客-程序员ITS304

第1关:用函数语句定义函数定义一个名字为mainJs()的函数;该函数有两个参数,均为字符串类型;函数的功能是返回这两个参数的拼接结果;具体请参见后续测试样例。//请在此处编写代码/********** Begin **********/function mainJs(a,b) { return a+b;}/********** End **********/第2关:用表达式定义函数定义一个匿名函数,将它赋值给变量myFunc;该函数实现求一个三位数的各个位上的数字之和

随便推点

匿名对象的理解_浅墨cgz的博客-程序员ITS304_什么是匿名对象

在 Java中匿名对象,一直比较难理解,我们先说一下匿名对象的使用情形有哪些?只使用对象一次,可以作为实际参数来传递,传递一个对象,里面就有不同的,属性方法可以调用。什么叫做匿名对象,就是指对象的名字没有,看不见。简称匿名。...

Spark-SQL 读写Parquet文件_商俊超的博客-程序员ITS304_spark写parquet文件

读Parquet格式wenjian import org.apache.spark.sql.{DataFrame, SparkSession}object CreateDataFrameFromParquet { def main(args: Array[String]): Unit = { //创建SparkSession(是对SparkContext的包装和增强) val spark: SparkSession = SparkSession.builder() ...

求解二元函数的最大值-遗传算法_weixin_30680385的博客-程序员ITS304

为了更好的理解遗传算法的运算过程,下面用手工的计算间的模拟遗传算法的各个主要的执行步骤:例、求下述二元函数的最大值:max f(x1,x2) = x1^2+x2^2;(1)个体编码:遗传算法的运算对象是表示个体的符号串,所以必须把变量x1,x2编码位一种符号串。本题中,用无符号二进制整数来表示。  因x1,x2为0-7之间的正数,所以分别用3位无符号二进制整数来表示,将他们连接在一...

matlab最小生生成树的聚类算法,基于密度的最小生成树聚类算法研究_weixin_32541333的博客-程序员ITS304

掣业业船妇坐船啦‘螗毽鬻 数据库与信息处理 格涤恭带芥带芥芾带苓赤基于密度的最小生成树聚类算法研究崔光照t,2曹玲芝2张勋才2王延峰11(华中科技大学控制科学与工程系,武汉430074)2(郑州轻工业学院电气信息工程学院,郑州450002)E-mial:wangyf@mail.hust。edu.cn摘要基于密度的方法是一种相当有效的聚类方法,能够发现任意形状的聚类,对噪声数据不敏感.但是聚类结果严...

ubuntu16.04安装搜狗拼音打办法以及相关问题处理_Say丶no的博客-程序员ITS304_ubuntu16.04 搜狗输入法

1.  环境介绍   Ubuntu 16.04,   sogou输入法: sogoupinyin_2.0.0.0108_amd64(搜狗拼音官网下载安装包)2.  问题表现  输入sudo dpkg -i sogoupinyin_2.2.0.0108_amd64.deb   错误信息如下:正在选中未选择的软件包 sogoupinyin。(正在读取数据库 ... 系统当前...

ASP.NET 5,.NET Core和 ASP.NET Core之间的区别_weixin_42098295的博客-程序员ITS304_.net core和.net5区别

有时我们可能对ASP.NET 5、.NET Core和 ASP.NET Core这些术语之间感觉困惑,本文就来介绍他们之间的区别。原文地址:ASP.NET 5,.NET Core和 ASP.NET Core之间的区别