OpenHarmony 嵌入式开发指南_Hi3863

第一章 如何使用本攻略

特别说明:由于Hi3863 是基于华为 LiteOS 物联网操作系统做的应用开发,需要对该 操作系统比较熟悉;如果涉及到WIFI等网络应用,还需具备LwIP 网络基础;编程语 言是 C,应用程序内会涉及比较多的结构体、指针等,因此对 C 语言功底要求较高;

还需要对Hi3861 芯片外设内部结构所有了解,才能更好的配置相应的外设功能。

综上所述,如果是新手小白,对操作系统、C 语言了解不是很深的,又打算使用 Hi3861开发,可以跟着本教程逐步学习,也请学习者提前准备好必要的基础知识。

学习本开发攻略主要参考的文档有:《Hi3863_KFB_V0.1.pdf》《WS63V100 SDK 开发 环境搭建 用户指南.pdf》

前者是百思鸿状针对 Hi3863 提供的硬件原理图,开发者可以根据原理图实现管脚功能 的配置,可以设计相关的嵌入式和物联网应用。

后者是海思官方针对 Hi3863 提供的开发环境参考手册,该参考手册包含了对芯片内 LiteOS 物联网操作系统软件接口的使用说明。

更多资料可查阅 fbb_ws63-master LiteOS 操作源码中的 docs 目录,关于源码开发者 可从 https://gitee.com/HiSpark/fbb_ws63下载。

本攻略编写风格是:

(1)实验介绍

(2)硬件讲解

(3)软件分析

(4)实验现象通过上述几大块的介绍让您快速掌握Hi3861 的鸿蒙 OS 开发。

本开发攻略配套的实验平台为:Hi3863,这款开发板出厂搭配的是 WS63 模组,学习的 时候如果配套该硬件平台做实验,必会达到事半功倍的效果,可以省去中间移植时遇 到的各种问题。

Hi3863 开发板外观图如下:

在学习Hi3863 鸿蒙 OS 时,可能会遇到各种问题,我们需要学会利用网络搜索资料, 找到解决方法。

第二章 开发板功能及使用介绍

本章将向大家介绍 Hi3863 开发板(以下简称Hi3863)的功能及使用方法,通过本章 的学习,让大家能快速上手开发板的学习。本章分为如下几部分内容:

2.1 开发板功能介绍

2.2 开发板使用方法

2.1 开发板功能介绍

|----|-----------|--------------------------------------------|
| 编号 | 模块名称 | 功能 |
| 1 | OLED 液晶接口 | 支持 IIC OLED 液晶模块, 可实现字符、汉字、图形 等显示 |
| 2 | 蜂鸣器模块 | 无源蜂鸣器,可实现声音大 小、音调变化 |
| 3 | WS63 模块 | 海思 Hi3863V100 芯片,内嵌 SRAM 606KB,内嵌 2M Flash |
| 4 | 舵机接口 | 支持 2 路 SG90 舵机,更多舵 机可通过引出 IO 连接 |
| 5 | ADC 电位器 | 使用内部 ADC 测量电位器电 |

|----|-------------------------|----------------------------------------|
| | | 压 |
| 6 | DS18B20&DHT11 温湿度传感器接口 | 支持 DS18B20 温度传感器和 DHT11温湿度传感器,实现 温湿度测量 |
| 7 | LED 灯 | 支持 4 路 LED 灯功能 |
| 8 | 按键 | 支持 4 路 按键功能 |
| 9 | 复位按钮 | 可实现系统复位以及程序烧 写操作 |
| 10 | 电机驱动模块 | 支持 5V 直流电机/28BYJ48 步进电机 |

2.2 开发板使用方法

2.2.1 开发环境搭建

. 备注: LiteOS 系统版本支持,Openharmony 系统版本不 支持 windows 环境搭建

工具下载:

|-----------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 工具版本 | 下载链接 |
| 支持操作系统:Windows10、Windows11 | |
| Python:3.11.4 版本 | python 下载链接 |
| cmake-3.20.5-py2.py3-none-win_amd64.whl | cmake 下载链接 |
| kconfig lib-14.1.0-py2.py3-none-any.whl | kconfiglib 下载链接 |

|-------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| pycparser-2.21-py2.py3-none-any.whl | pycparser 下载链接 |
| windows_curses-2.3.3-cp311-cp311- win_amd64.whl | windows_curses 下载链接 |
| g it(如果使用ZIP 格式下载,可以不按照 g it,详情参考星闪代码下载方式二) | Git 下载链接 |
| CH341SER 驱动 | CH340G 驱动下载链接 |

2.2.1.1 HiSpark Studio 下载安装

. 登录上海海思开发者网站获取 IDE 工具,需要注册账号下载。

HiSpark Studio 安装

o 下载完成后,双击"HiSparkStudio1.0.0 .10.exe"安装。

o 安装界面如下,选择"我同意此协议" ,点击"下一步"。

o 根据用户自身磁盘空间大小,选择对应的磁盘进行安装,选择完成后,点击下 一步。(注意如果你的用户名带中文目录,请安装到 D 盘、E 盘等其他目录这里以 D 盘为例

o 根据用户自身需要勾选附加任务,默认全部勾选,选择完成后,点击下一步。

o 安装过程如下,等待安装完成。

o 如果在安装过程中弹出"python 3.11.4"会自动弹出"python"安装提示,点击"取消"即 可

o 出现如下界面代表安装完成,点击完成即可

o HiSpark studio 打开主页界面如下。

2.2.1.2 环境变量添加

o 工具安装完成后,在电脑系统环境变量中,添加环境变量(这里以 win10 为例,如果

是 win11,可以在百度搜索如何添加环境变量),在此电脑鼠标"右键" ,点击"属性"

o 弹出系统属性框,点击"环境变量"

o 在系统环境变量,选择"Path" ,双击进入

o 在编辑环境变量中添加"xxx\HiSpark Studio\tools\Windows\ninja" 、"xxx\HiSpark Studio\tools\Windows\gn" 、"xxx\HiSpark

Studio\tools\Windows\cc_riscv32_musl_fp_win\bin"在几个环境变量(xxx 代表 HiSpark Studio 安装目录),添加完成后,点击"确定"。

o 环境变量安装完成后,测试是否添加成, 在"命令行窗口分别输入"ninja --

version" 、"gn version" 、"riscv32-linux-musl-gcc -v" ,出现如下图所示版本号代 表成功

2.2.1.3 python 下载及安装

o 环境变量配置成功后,下载 python(版本:3.11.4),python 下载地

址:https://www.python.org/ftp/python/3.11.4/python-3.11.4-amd64.exe

o 下载完成后,点击安装,安装界面勾选"ADD python.exe to PATH" ,选择"Customize installation"安装

o 点击"next"即可

o 修改安装路径,如果电脑用户名不带中文可以默认安装,如果电脑用户名带中文,请 安装其他 磁盘(这里以 D 盘为例),选择好路径以后,点击"install"(注意:安装 目录不要带中文路径)

o 等待安装完成即可

o 安装完成后,点击"close"即可

o 打开"命令行窗口" ,输入"python" ,显示 3.11.4 即成功

2.2.1.4 编译插件安装

o 下载 kconfiglib 下载链接

o 下载插件 cmake 下载链接

o 下载插件pycparser 下载链接

o 下载插件 windows_curses 下载链接

o 将 kconfig lib、cmake、pycparser、windows_curses 等文件存放在同一个目录下(任 意目录 即可),在目录文件夹上放输入"cmd"

o 在"命令行窗口"输入 pip install windows_curses-2.3.3-cp311-cp311- win_amd64.whl

o 在"命令行窗口"输入 pip install cmake-3.20.5-py2.py3-none-win_amd64.whl

o 在"命令行窗口"输入 pip install kconfig lib-14.1.0-py2.py3-none-any.whl

o 在"命令行窗口"输入 pip install pycparser-2.21-py2.py3-none-any.whl

2.2.1.5 星闪代码下载

. 下载 SDK 代码, 目前提供两种方式,第一种方式如下:

o 第一种方式通过 g it 指令下载(在Windows上使用 g it 指令下载代码,需要提前安装 g it, Git 下载链接地址:https://git-scm.com/downloads/win),在 xx 盘鼠标右键 选择"Open Git Bash here" ,如下图所所示(建议在 D 盘、E 盘根目录执行

o 在命令框中输入`git clone https://gitee.com/HiSpark/fbb_ws63.git`指令下载代 码,等待下载完成。

. 第二种方式 ZIP 下载方式如下:

o SDK 包下载地址:https://gitee.com/HiSpark/fbb_ws63,在主界面上点击"克 隆/下载" ,选择"下载 ZIP" ,等待下载,下载完成如下。

. 解压"fbb_ws63_master" ,在解压过程 中需要关闭电脑杀毒软件防止有些文件当做病毒 被删除掉 ),解压方式选择"Extract Here"即可(建议解压到D 、E 盘等根目录,路径 不要太深,且不要有中文路径

2.2.1.6 新建工程

. 代码下载完成后,打开 HiSpark studio 工具,点击"新建工程"。

. 新建工程界面中芯片:"WS63" ,工程名:"xxx"(用户自定义,但是不能带中文,特殊符 号),软件包:"xxx/fbb_ws63/src"(**SDK 软件包存放路径,这个地方一定要选到 src 层级,否则编译会失败**),配置选择完成后,点击"完成按钮"。

. 点击"build"或者"rebuild"编译(编译建议关闭杀毒软件,不关可能会导致编译时 间长

. 编译完成如下图所示。

2.2.1.7 镜像烧录

. 硬件搭建:Typec 线将板端与 PC 端连接

. 安装驱动"CH341SER 驱动"(CH341SER 驱动下载地址如果该链接失效或者无法 下载,用 户自行百度下载即可 ),安装 CH341SER 驱动,安装前单板需要与 PC 端相连,点击安装即 可,显示驱动安装成功代表成功 ,如果出现驱动预安装成功代表安装失败

. 安装成功后,在 HiSpark Studio 工具中点击"工程配置"按钮,选择"程序加载",

传输方式选择"serial" ,端口选择"comxxx" ,com 口在设备管理器中查看。

. 配置完成后,点击工具"程序加载"按钮烧录。

. 出现"Connecting, please reset device..."字样时,复位开发板,等待烧录结束。

. 在 HiSpark Studio 底端选择"监视器" ,选择端口(开发板需要与电脑通过 typec

),如果没有端口显示可以刷新一下,点击"开始监视" ,复位开发板,出现"flashboot version"字样代表编译烧录成功

第三章 Hi 3863 介绍

本章将向大家介绍Hi3863 芯片及模组内部资源、功能、鸿蒙 OS 操作系统等,通过本 章的学习,让大家对Hi3863 更加了解,为后面的学习做好铺垫。本章分为如下几部分 内容:

3.1 初识 Hi3863

3.2Hi3863 运行系统介绍

3.3Hi3863 启动流程

3.1 初识 Hi3863

在物联网(IoT)技术日新月异的今天,Hi3863 作为华为推出的一款专为物联网设备 设计的低功耗、高集成度 WiFiSoC 芯片,正逐渐成为开发者们关注的焦点。本节将带 您初步了解Hi3863,包括其基本概念、主要特点以及它在物联网领域的重要性。

3.1.1Hi3863 简介

  1. Hi3863 概述

Hi3861 是华为海思半导体有限公司针对物联网市场推出的一款高度集成的无线连接解 决方案。该芯片集成了 Wi-Fi 6(IEEE 802.11ax)星闪(SLE 1.0)BLE 多模并 发,物理层速率最高达 114.7Mbps(Wi-Fi 6)和 12Mbps(星闪),星闪支持

1MHz/2MHz/4MHz 频宽及网关功能,以及一个高性能的 32 位微处理器核心,片内集成 606KB SRAM、300KB ROM,合封 4MB Flash,为物联网设备提供了强大的通信和处理能 力。

  1. 主要特点

a. 低功耗设计:

Hi3863 特别注重低功耗设计,非常适合电池供电的物联网设备。它采用了先进的电源 管理技术和节能算法,确保设备在长时间运行下仍能保持较低的功耗,延长电池寿

命。

b. 高集成度:

该芯片集成了WiFi模块、星闪模块、处理器、内存和必要的硬件接口,大大减少了外 部组件的需求,简化了系统设计的复杂度。这种高集成度不仅降低了成本,还提高了 系统的可靠性和稳定性。

c. 强大的通信能力:

支持 WiFi6 标准,提供高速、稳定的无线连接。这意味着 Hi3863 可以轻松接入家庭或 企业网络,实现物联网设备与云端或其他设备的无缝通信。

d. 丰富的接口资源:

提供 GPIO、I2C、SPI、UART 等多种接口,方便开发者将 Hi3861 与各种传感器、执行 器等外设进行连接和控制。这些接口资源为物联网设备的扩展提供了广阔的空间。

e. 易于开发:

华为为 Hi3863 提供了丰富的开发工具和文档资源,包括 SDK、示例代码等。这些资源 有助于开发者快速上手,降低开发难度和成本。

  1. 应用场景

Hi3863 凭借其低功耗、高集成度和强大的通信能力,在物联网领域有着广泛的应用前 景。以下是一些典型的应用场景:

智能家居:用于智能灯泡、智能插座、智能摄像头、智能门锁等设备的无线连接和控 制。

智能穿戴:如智能手表、健康监测手环等,通过WiFi 实现数据同步和远程监控。

工业物联网:在工业自动化、智能制造等领域,Hi3863 可用于实现设备的远程监控、 数据采集和故障预警等功能。

智慧城市:在智能交通、智能安防、环境监测等领域,Hi3863 可助力构建更加智能、 高效的城市管理系统。

Hi3863 作为华为在物联网领域的重要布局之一,以其出色的性能和广泛的应用场景,

正逐步成为物联网设备开发者的首选芯片之一。通过深入了解Hi3863 的特点和应用场 景,相信您将能够更好地利用这款芯片,为我国物联网领域的发展贡献自己的力量。

在接下来的章节中,我们将进一步探讨Hi3863 的硬件架构、编程入门等内容,帮助您 更全面地掌握这款芯片的开发技能。

3.2 Hi 3863 运行系统介绍

3.2.1Hi3863 运行什么操作系统

Hi3863 内部运行的是 HarmonyOS 操作系统,具体来说是 HarmonyOS 的 LiteOS-M 内

核。LiteOS-M 是 HuaweiLiteOS 的一个分支,专为 IoT 领域构建,主要面向没有 MMU (内存管理单元)的处理器。LiteOS-M 内核具备轻量级、低功耗、组件丰富、快速开 发等关键能力,为开发者提供"一站式"完整软件平台。LiteOS-M 内核小巧,适合在资 源受限的设备上运行,同时针对 IoT 设备的特点优化了功耗管理,使设备在运行时更 省电。

3.2.2OpenHarmony HarmonyOS 关系

OpenHarmony 是由开放原子开源基金会孵化及运营的开源项目, 旨在面向全场景、全 连接、全智能时代,通过开源方式搭建一个智能终端设备操作系统的框架和平台。它 具备分布式、组件化等特点,是一个"全领域、新一代、开源、开放"的操作系统。 OpenHarmony 作为一个开源项目,得到了全球开发者的支持和贡献。其应用场景主要 面向智能家居、物联网终端、智能穿戴等领域,通过提供统一的分布式服务管理(发 现、同步、注册、调用)机制,支持跨设备的应用远程启动、远程调用等操作。

HarmonyOS(鸿蒙操作系统)是华为基于开源项目 OpenHarmony 开发的面向多种全场景 智能设备的商用版本。它不仅包含了 OpenHarmony 的基础功能,还整合了华为自身的 技术和创新,以提供更丰富的功能和更好的用户体验。

3.2.3HarmonyOS LiteOS 有什么关系

  1. 定位与用途

鸿蒙 OS:是华为研发的面向全场景的分布式操作系统,旨在实现人、设备、场景之间 的有机联系,提供全场景的智能生活体验。鸿蒙 OS 支持手机、平板、电视、智能汽 车、可穿戴设备等多种终端设备。

LiteOS:是华为针对物联网领域推出的轻量级操作系统,主要用于智能穿戴、智能家 居、工业物联网等低功耗、低延时的物联网场景。LiteOS 具有轻量级、低功耗、高实 时性等特点。

  1. 技术架构与内核

鸿蒙 OS:采用了分布式架构,支持多屏协同和分布式任务调度。鸿蒙 OS 的内核包括 Linux 内核和LiteOS 内核,可以根据不同的设备和应用场景选择适合的内核。

LiteOS:是鸿蒙 OS 中用于物联网设备的一个轻量级内核。LiteOS 内核小巧、高效, 支持快速启动、低功耗、实时响应等特性。

  1. 关系与联系 包含与被包含:鸿蒙 OS 作为一个全场景的分布式操作系统,包含了 LiteOS 作为其物联网设备的一个内核选项。也就是说,鸿蒙 OS 可以基于LiteOS 内核来运行物联网设备上的应用。

独立发展:虽然 LiteOS 是鸿蒙 OS 的一部分,但两者在技术上也有相对独立的发展路 径。LiteOS 作为物联网操作系统,针对物联网设备的特点进行了专门的优化和设计; 而鸿蒙 OS 则更注重于跨设备、跨场景的全场景智能体验。

3.3Hi3861 启动流程

3.3.1Boot 介绍

Boot 是操作系统启动之前的软件,通用叫法是 bootloader,Hi3863 的 boot 分为 4 部 分:RomBoot、FlashBoot、LoaderBoot、 CommonBoot,如图 3-3-1 所示。

图 3-3-1 Hi3863 Boot 启动流程

. RomBoot 功能包括:加载 LoaderBoot 到 RAM,进一步利用 LoaderBoot 下载镜像到 Flash、烧写 EFUSE, 校验并引导 FlashBoot。FlashBoot 分为 AB 面,A 面校验成 功直接启动,校验失败会去校验 B 面,B 面校验成功会修复 A 面再引导启动,否则 复位重启。

. FlashBoot 功能包括:升级固件,校验并引导固件。

. LoaderBoot 功能包括:下载镜像到 Flash, 烧写 EFUSE(例如:安全启动/Flash 加密相关密钥等)。

. CommonBoot 为 Flashboot 与 LoaderBoot 共用的功能模块。

3.3.2LiteOS-M 启动流程介绍

嵌入式处理器和操作系统都具有类似的结构启动流程也大体相似,从芯片上电开始 Boot 把控制权交给操作系统,Hi3863 从 flashboot_ws63 里面的 main.c 跳转到操作 系统代码如下:

|------------------------------------------------------------------------------------------------------------------------------------------------|
| ws63_ftm_mode_init(image_addr) ; ws63_flashboot_recovery () ; uapi_watchdog_kick() ; jump_to_execute_addr(image_addr + APP_IMAGE_HEADER_LEN) ; |

跳转到 bootloader 目录下的 src 目录下的 boot_jump.c,代码如下:

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| #include "boot_jump.h" #include "boot_reset.h" void jump_to_execute_addr(uint32_t addr) { void (*entry) (void) = (void*) (uintptr_t) (addr) ; entry () ; boot_fail() ; } |

这部分是将该地址当函数作为跳转,因为FlashBoot 和 kernel,是两套代码程序,他 们之间没有依赖引用关系,但是他们在一个地址空间,所以直接地址跳转,这也是从 Boot 到 kernel 通用的跳转方式。

芯片启动是从中断向量表的复位中断处理程序开始,接着把数据从 Flash 复制到

RAM、清空bss 数据段、初始化时钟、跳转到main 函数。我们通过查看 asm 文件的 main 函数,文件位置在工程输出目标文件目录/output/ws63/acore/ws63-liteos- app/ws63-liteos-app.asm 中,可以看出其中调用的函数如下所示:

从图中可知 osKernelInitialize 是负责初始化内核数据结构

从 app_tasks_init 开始脱离了 sdk,跳转到 app_init.c,文件位置在工程目录 /middleware/utils/app_init/appinit.c 中,内容如下

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| #include "app_init.h" extern init_call_t __zinitcall_app_run_start ; extern init_call_t __zinitcall_app_run_end ; void app_tasks_init(void) { init_call_t *initcall = &__zinitcall_app_run_start ; init_call_t *initend = &__zinitcall_app_run_end ; for ( ; initcall < initend ; initcall++) { (*initcall) () ; } } attribute ((weak)) void system_init(void) { } |

文件代码比较简洁,第八行注册 app 启动运行回调函数,第九行注册 app 结束运行回 调函数,第十行进入到任务循环,所有初始化,以及任务队列准备好以后,等待用户 应用加入到此队列进行循环调用。

3.3.3 用户应用的启动原理

用户如何加入到 app 任务队列,我们可以先查阅官方提供的例程开始分析,文件路径 为/application/samples/peripheral/blinky/blinky_demo.c(说明:samples 目录 是存放用户编写的应用程序代码),我们可以看到所有 demo 都没有main 函数,那系 统如何调用,我们发现第 51 行有一个函数 app_run(blinky_entry);此函数为用户程

序入口地址,以宏方式进行封装,跳转进入查阅得知跳转到app_init.h,是的,它又

回到上方提到的appinit.c 所对应的头文件上,从官方代码注释得知,此函数为系统 初始化和启动的入口,接着点击 layer_initcall_def(func, run, "app_run")函数, 进入其中发现又封装了宏,如下方所示:

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| #define layer_initcall(func, layer, clayer, priority) \ static const init_call_t USED_ATTR _zinitcall##layer##_##func \ attribute ((section(".zinitcall." clayer #priority ".init"))) = (func) |

内容比较复杂,解释一下,USED_ATTR 对应的是__attribute__ ((used))表示字节对 齐,通过查阅 used,得知类型为 uint32_t used; 表示 4 字节对齐,继续往下分析, _zinitcall##layer##_##func 是粘贴宏,所以合并后得到

__zinitcall.app_run0.init = blinky_entry, __zinitcall.app_run0.init 在

/output/ws63/acore/ws63-liteos-app/ws63-liteos-app.map 文件,内容如图所示:

从运行角度看,启动中调用到了应用程序 blinky_entry,实际将此函数加载到

__zinitcall.app_run0.init,程序运行时通过此段调用 blinky_entry 函数,所以也 就明白了为什么应用程序的入口为 app_run(blinky_entry);其实应用程序的调用关 系就是编译链接阶段生成指定的段,初始化时调用指定段,这样实现了LiteOS-M 的操 作系统代码与应用程序代码的解耦。

第四章创建工程模板

前面章节我们已经搭建好开发环境,本章开始基于Hi3861创建工程模板,为后续应用 程序开发做铺垫,免去了重复创建工程的烦恼。本章分为如下几部分内容:

4.1 Hi 3861 工程创建

要创建工程模板,首先得掌握第二章内容,将环境搭建好,我们以官方实验例程为 例,介绍如何将此实验烧录到开发板。

  1. 在配置界面选择需要下载的工程,如图所示

系统配置是通过每个实验目录里面的 Kconfig 文件进行设置添加的,如图所示

系统配置完成后,实验会在对应的CMakeList.txt文件中被加载到工程系统,如图所示

  1. 进入 blinky 目录打开 blinky_demo.c 会发现,GPIO 管脚为 CONFIG_BLINKY_PIN, 这是在系统配置选择的管脚 2,点击进此宏跳转进入如图所示:

  2. 确定号GPIO 口管脚后,整个工程模板设置流程基本清楚,现在需要将项目编译后 下载到开发板查看实验现象。

  3. 将开发板 USB 口接到电脑,如图所示:

  1. 检查电脑设备管理端口号,如图所示:
  1. 工程配置,设置串口,如图所示:
  1. 点击重新编译
  1. 点击程序加载,如图所示
  1. 下载完成,点击监视器并打开,按复位按钮,查阅运行结果
  1. 发现开发板没有闪烁灯,是因为GPIO 口没有接到 LED,所以需要将GPIO 2 通过杜 邦线接 LED,后续板子会改善,如图所示:

第五章 初始 LiteOS -M

在传统的单片机编程中,我们通常采用的是裸跑,即在一个大循环内运行功能代码。

随着应用程序的加大及功能的复杂,裸机运行往往很难满足要求,甚至使编程变得更 加复杂,这时就需要考虑引入 RTOS 实时操作系统实现多任务管理。华为海思推出的

Hi3863 芯片就内置了实时操作系统LiteOS-M,因此选择该芯片可以更容易学习物联网 开发。本章分为如下几部分内容:

5.1 LiteOS-M

5.2 CMSIS-RTOS2 介绍

5.1LiteOS-M 介绍

LiteOS-M(LiteOSMini)作为华为物联网操作系统 HuaweiLiteOS 的组成部分,具有高 效、低功耗、安全可靠的特点。该系统适用于各种小型物联网设备,如传感器、智能 家居设备、智能穿戴等,能够大幅降低设备布置及维护成本,同时有效降低开发门槛 并缩短开发周期。主要特性如下:

1、超轻量级:LiteOS-M 的内核非常小巧,仅占用几十 KB 的内存空间,这使得它非 常适合资源受限的嵌入式设备。

2、高效与低功耗:该系统通过优化任务管理和资源调度,实现高效运行的同时保持低 功耗特性,从而延长设备的使用寿命。

3、安全可靠:LiteOS-M 提供了丰富的安全特性,确保物联网设备在数据传输和存储 过程中的安全性和可靠性。

4、丰富的通信机制:支持 LwM2M、CoAP 等 IoT 互联协议栈,并集成了 AgentTiny 模 块,简化了与云平台的连接过程。

5、支持多种开发板:LiteOS-M 已经适配了多种开发板,包括 ST、NXP、GD、 MIDMOTION 等,方便开发者进行快速开发和测试。

LiteOS-M 的系统架构主要包括任务管理、内存管理、时间管理、通信机制、中断管 理、队列管理、事件管理、定时器等基础组件。这些组件共同协作,实现操作系统的 核心功能。

5.2 CMSIS - RTOS 2 介绍

CMSIS 是 Cortex 微 控 制 器 软 件 接 口 标 准 ( CortexMicrocontrollerSoftware InterfaceStandard)是 ARM 和一些编译器厂家以及半导体厂家共同遵循的一套标准, 是由ARM 专门针对 Cortex-M 系列提出的标准。在该标准的约定下,ARM 和芯片厂商会 提供一些通用的API接口来访问Cortex 内核以及一些专用外设,以减少更换芯片以及 开发工具等移植工作所带来的金钱以及时间上的消耗。

CMSIS-RTOS2(CMSIS-RTOSAPIVersion2)是 Arm®Cortex®-M 处理器的通用的 RTOS 接 口。为需要 RTOS 功能的软件组件提供了标准化的API。CMSIS-RTOS2 是一个通用的

API,它与底层的 RTOS 内核无关,写应用序的程序员在用户代码中调用

CMSISRTOS2API 函数,可以更方便地将应用程序从一个 RTOS 到另一个 RTOS,使用

CMSIS-RTOS2API 的中间件也可以避免很多不必要的移植工作。CMSIS-RTOS2 所处位置 图如下:

鸿蒙 OS 在 CMSIS-RTOS2 接口中封装了 LiteOS-m 的内核代码,对于 SDK 位置如下:

CMSIS-RTOS2 核心文件在 cmsis_os2.h 中。所有封装的操作系统接口函数可以直接在 cmsis_os2.h 内查看,源文件无法查阅,但是我们可以通过阅读Hi3861源码进行推 导,Hi3861 提供 cmsis_liteos2.c 源码,下面来看下它是如何封装的。

例如 osKernelInitialize()函数内调用了 LOS_KernelInit()函数,如下:

例如 osThreadNew()函数内调用了 LOS_TaskCreate 函数,如下:

如果用户有 LiteOS 或其它 RTOS 基础,那么使用 CMSIS-RTOS2 接口就非常简单。

我们开发 Hi3863 程序,涉及到 LiteOS-M 则需要调用 cmsis_os2.h 头文件,从而使用 API 函数。