1. 初识LiteOS

1.1. LiteOS简介

1.1.1. 版权

Huawei LiteOS 是华为公司针对物联网领域推出的面向万物感知、互联、智能的轻量级操作系统(后文用LiteOS表 示Huawei LiteOS),为终端厂商开发人员提供“一站式”完整软件开发平台,快速接入云,有效降低开发门槛、缩短 开发周期。于2012年为支持华为终端产品而开发的嵌入式操作系统;在2014年就已经在华为Mate系列、P系列、荣耀 系列手机、可穿戴产品上规模商用;在2016年9月就发布LiteOS开源版本,Kernel源代码开源 ,经过多年的发展, 现在已经发布了V2.1版本,并且在2018年9月发布了LiteOS IDE开发工具LiteOS Studio V1.0。

1.1.2. 收费问题

Huawei LiteOS是一款 “开源免费”的实时操作系统,面向IoT领域轻量级物联网操作系统,遵循BSD-3开源许可协议, 广泛应用于智能家居、个人穿戴、车联网、城市公共服务、制造业等领域,大幅降低设备布置及维护成本,有效降低 开发门槛、缩短开发周期。

同时提供端云协同能力,集成了LwM2M、CoAP、mbed TLS、LwIP全套IoT互联协议栈,且在LwM2M的基础上,提供了 AgentTiny模块,用户只需关注自身的应用,而不必关注LwM2M实现细节,直接使用AgentTiny封装的接口即可简单快 速实现与云平台安全可靠的连接。

Huawei LiteOS自开源社区发布以来,围绕NB-IoT物联网市场从技术、生态、解决方案、商用支持等多维度使能合作 伙伴,构建开源的物联网生态,目前已经聚合了50+MCU和解决方案合作伙伴,共同推出一批开源开发套件和行业解决 方案,帮助众多行业客户快速的推出物联网终端和服务,客户涵盖抄表、停车、路灯、环保、共享单车、物流等众多 行业,为开发者提供 “一站式” 完整软件平台,有效降低开发门槛、缩短开发周期。

这里说到的开源,指的是读者可以免费得获取到LiteOS的源代码,读者的产品的全部代码都可以闭源,不用开源,免 费的意思是无论读者是个人还是公司,都可以免费地使用,不需要掏一分钱。

对于BSD-3开源许可协议,使用者基本上可以“为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为 开源或者专有软件再发布。但“为所欲为”的前提是当读者发布使用了BSD-3协议的代码,或者以BSD协议代码为基础做 二次开发自己的产品时,需要满足三个条件。

  1. 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。

  2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。

  3. 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广

1.1.3. LiteOS的意义

不知读者是否发现,在RTOS领域,我们能接触到的实时操作基本都来自国外,很少见到有国内的厂家在RTOS领域崭露头 角。从早年最火的μCOS,到如今市场占有率最高的FreeRTOS,到获得安全验证最多的RTX,再到盈利能力最强的ThreadX, 均来自国外,而华为作为全球顶尖的通讯科技公司,其开发的LiteOS作为一款国产的物联网操作系统,简单易用,低功 耗设计,组件丰富等特性也将让LiteOS大放异彩。野火,作为一个国内嵌入式的教育品牌,能为国产RTOS出一份力也是 我们的荣幸,希望这本书能够帮助读者快速的入门和掌握LiteOS。

1.2. 学习LiteOS

1.2.1. 为什么要学习RTOS

当我们进入嵌入式这个领域的时候,往往首先接触的都是单片机编程,单片机编程又首选51单片机来入门。这里面说的单 片机编程通常都是指裸机编程,即不加入任何实时操作系统(Real Time OperationSystem,RTOS)的程序,如今国产 的LiteOS经过多来年的发展,声势迅猛,在国产RTOS中占据很大的地位。

在裸机系统中,所有的程序基本都是自己写的,所有的操作都是在一个无限的大循环里面实现。现实生活中的很多中小型 的电子产品用的都是裸机系统,而且也能够满足需求。但是为什么还要学习RTOS编程呢?其实无非就是两点:一是项目需 要,随着产品要实现的功能越来越多,单纯的裸机系统已经不能够完美地解决问题,反而会使编程变得更加复杂,如果想 降低编程的难度,可以考虑引入RTOS实现多任务管理,这是使用RTOS的最大优势。二是学习的需要,必须学习更深入的知 识,实现更好的职业规划,争取以后在技术一途上走得更远。

1.2.2. 如何学习RTOS

裸机编程和RTOS编程的风格有些不一样,而且有很多人说RTOS的学习很难,这就导致学习的人一听到RTOS编程就在心理面 忌惮三分,结果就是出师未捷身先死。

那么到底如何学习一个RTOS?最简单的就是在别人移植好的系统之上,看看RTOS里面的API使用说明,然后调用这些API实 现自己想要的功能即可。完全,不用关心底层的移植,这是最简单快速的入门方法。这种方法各有利弊,如果是做产品,好 处是可以快速的实现功能,将产品推向市场,赢得先机,弊端是当程序出现问题的时候,因对这个RTOS不够了解,会导致 调试困难,焦头烂额,一筹莫展。如果是学习,那么只会简单的调用API,那是不可取的。

目前市场上现有的RTOS,它们的内核实现方式都差不多,因此只需要深入学习其中一款就行。万变不离其宗,以后换到其他 型号的RTOS,使用起来,那自然是得心应手。那如何深入的学习一款RTOS?这里有一个最有效也是最难的方法,就是阅读 RTOS的源码,深究内核和每个组件的实现方式,这个过程枯燥且痛苦。

市面上虽然有一些讲解相关RTOS源码的书,如果读者的基础不够,且从未没有使用过该款RTOS,那么源码看起来还是会非常 枯燥,且并不能从全局掌握整个RTOS的构成和实现。

现在,本书将采用一种全新的方法来教读者学习一款RTOS,即不是单纯的讲里面的API如何使用,而是,从深入源码去学习, 层层叠加,不断地完善,学习LiteOS中的处理思想,让读者在每一个阶段都能享受到成功的喜悦。在这过程中,只需要读者 具备C语言的基础就行,然后就是跟着野火这个教程笃定前行,最后定有所成。

1.2.3. 选择什么RTOS

这个用来教学的RTOS,本书不会再重复的造轮子,而是选取目前国内的LiteOS为蓝本,将其抽丝剥茧,层层叠加,深入学习 LiteOS内部资源,然后再去实战,相互映衬,使得理解更加深入。