# LiteOS ## 产品介绍 - [简介](https://support.huaweicloud.com/productdesc-LiteOS/zh-cn_topic_0145347223.md): Huawei LiteOS是华为面向IoT领域,构建的轻量级物联网操作系统,可广泛应用于智能家居、个人穿戴、车联网、城市公共服务、制造业等领域。Huawei LiteOS发布于2015年5月的华为网络大会上。自开源社区发布以来,围绕 NB-IoT 物联网市场从技术、生态、解决方案、商用支持等多维度使能合作伙伴,构建开源的物联网生态。目前已 - [架构框图](https://support.huaweicloud.com/productdesc-LiteOS/zh-cn_topic_0145347225.md): Huawei LiteOS支持多种芯片架构,如Cortex-M series、Cortex-R series、Cortex-A series等,可以快速移植到多种硬件平台。Huawei LiteOS也支持 UP(单核)与 SMP(多核)模式,即支持在单核或者多核的环境上运行。除基础内核外,Huawei LiteOS还包含了丰富的组件,可帮 - [硬件支持](https://support.huaweicloud.com/productdesc-LiteOS/zh-cn_topic_0145347226.md): 华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。 - [代码结构导读](https://support.huaweicloud.com/productdesc-LiteOS/zh-cn_topic_0302331626.md): 关于Huawei LiteOS的代码入口和目录结构说明,参见Huawei LiteOS码云代码仓的markdown文档:LiteOS代码入口和目录结构说明。 - [术语](https://support.huaweicloud.com/productdesc-LiteOS/zh-cn_topic_0145347229.md): 编解码插件和设备profile是一对一的关系,即一个设备profile只能对应一个编解码插件。APP和编解码插件的关系是一对多的关系,即一个APP下面可以同时关联多个编解码插件。 ## 编译和开发工具 - [配置&编译框架简介](https://support.huaweicloud.com/build-IDE-LiteOS/zh-cn_topic_0302049455.md): Huawei LiteOS使用Kconfig文件配置系统,基于GCC/Makefile实现组件化编译。不论是Linux下使用make menuconfig命令配置系统,还是Windows下使用Huawei LiteOS Studio进行图形化配置,Huawei LiteOS都会同时解析、展示根目录下的.config文件和tools/men - [Huawei LiteOS开发工具介绍](https://support.huaweicloud.com/build-IDE-LiteOS/zh-cn_topic_0308725367.md): Huawei LiteOS Studio是Huawei LiteOS提供的一款Windows下的图形化开发工具。它以Visual Studio Code的社区开源代码为基础,根据C语言编程特点、Huawei LiteOS嵌入式系统软件的业务场景开发的工具。它提供了代码编辑、组件配置、编译、烧录、调试等功能,可以对系统关键数据进行实时跟踪、 - [Linux下配置工具的使用](https://support.huaweicloud.com/build-IDE-LiteOS/zh-cn_topic_0308950992.md): 在Huawei_LiteOS根目录下执行make menuconfig命令会展示图形化配置界面,用户可以根据需要自行裁剪模块或者修改设置。执行完保存菜单退出,该命令会更新根目录下.config文件。menuconfig的使用方式,主要包括:上下键:选择不同的行,即移动到不同的选项上。空格键/回车:用于开启或关闭选项。开启选项:对应的选项前 - [软件要求](https://support.huaweicloud.com/build-IDE-LiteOS/zh-cn_topic_0314196088.md): Ubuntu Version 14.04及以上版本,作为编译Huawei LiteOS的服务器。GNU Arm Embedded Toolchain编译器,用于代码编译。GNU Make构建器,用于文件组织与链接。python 2.7/3.2+,pip包管理工具,kconfiglib库,用于编译前通过图形化界面完成配置。 - [安装编译器&构建器](https://support.huaweicloud.com/build-IDE-LiteOS/zh-cn_topic_0314196089.md): 安装GNU Arm Embedded Toolchain编译器。下载编译器。对于32位芯片架构,官方下载地址为:GNU Arm Embedded Toolchain编译器,建议使用2019-q4-major及以上版本。对于64位芯片架构,官方下载地址为:64位GNU Arm Embedded Toolchain编译器,建议使用最新版本的a - [安装图形化配置解析工具](https://support.huaweicloud.com/build-IDE-LiteOS/zh-cn_topic_0314196090.md): 安装python 2.7/3.2+。下面以python3.8为例介绍安装方法。命令行方式安装:sudo apt-get install python3.8源码包编译安装:通过官网下载python源码包。解压源码包。参考如下命令完成解压,将压缩包名替换为实际下载的源码包名:tar -xf Python-3.8.5.tgz检查依赖。解压后进入 - [Linux下编译流程](https://support.huaweicloud.com/build-IDE-LiteOS/zh-cn_topic_0302049456.md): 参照搭建Linux编译环境完成环境搭建后,即可按以下步骤完成编译。请下载完整的Huawei LiteOS代码,代码仓在gitee上,请选择master分支进行下载:LiteOS代码仓。根据实际使用的开发板,拷贝tools/build/config/目录下的默认配置文件${platform}.config到根目录,并重命名为.config。 - [搭建Windows编译环境](https://support.huaweicloud.com/build-IDE-LiteOS/zh-cn_topic_0308725370.md): Windows下的编译可以使用Huawei LiteOS Studio图形化IDE。访问Huawei LiteOS Studio下载链接获取最新发行版。参考Huawei LiteOS Studio安装指南,完成开发环境的搭建。 - [Windows下编译流程](https://support.huaweicloud.com/build-IDE-LiteOS/zh-cn_topic_0308726725.md): 参考Huawei LiteOS Studio使用入门,完成Huawei LiteOS工程编译。IDE中各个界面介绍可以参考HUAWEI LiteOS Studio界面介绍。 ## 快速入门 - [搭建开发环境](https://support.huaweicloud.com/qs-LiteOS/zh-cn_topic_0308937178.md): 在Linux上完成编译后,通过Windows访问Linux主机上的文件,完成系统镜像文件的烧录调测与运行。所以开发环境包括Linux下的编译环境,以及Windows下的烧录调测工具和USB转串口驱动。在Linux下搭建编译环境。参考搭建Linux编译环境。参考搭建Linux编译环境。在Linux下搭建samba服务,实现Windows下对 - [编译](https://support.huaweicloud.com/qs-LiteOS/zh-cn_topic_0308937179.md): 搭建完开发环境后,即可按以下步骤完成编译。请下载完整的Huawei LiteOS代码,代码仓在gitee上,请选择master分支进行下载:LiteOS代码仓。根据实际使用的开发板,拷贝tools/build/config/目录下的默认配置文件${platform}.config到根目录,并重命名为.config。在Huawei_Lite - [烧录](https://support.huaweicloud.com/qs-LiteOS/zh-cn_topic_0308937180.md): 双击JLink安装目录中的JFlashLite.exe,如下图所示。点击下图红框中的“...”按钮,选择对应的设备,图中以STM32F429为例,将设备设置为STM32F429IG。最后点击右边的“OK”按钮完成设置。点击下图箭头所指的“...”按钮。在弹出的窗口中选择要烧录的文件,这里可以通过搭建好的samba服务,访问Linux下编译 - [运行](https://support.huaweicloud.com/qs-LiteOS/zh-cn_topic_0308937181.md): 按下开发板的复位RESET按钮,可以看到串口输出了Huawei LiteOS启动后运行“Kernel Task Demo”的打印信息,其中“Huawei LiteOS #”是Shell交互界面的提示符,如下图所示:Huawei LiteOS默认打开了Shell组件,可以在串口工具中输入支持的Shell命令,再勾选“加回车换行”,点击“发送 - [搭建开发环境](https://support.huaweicloud.com/qs-LiteOS/zh-cn_topic_0308937183.md): 访问Huawei LiteOS Studio下载链接获取最新发行版。参考Huawei LiteOS Studio安装指南,完成开发环境的搭建。 - [编译](https://support.huaweicloud.com/qs-LiteOS/zh-cn_topic_0308937184.md): 如果本地没有下载Huawei LiteOS的源代码,则需要新建工程,参考Huawei LiteOS Studio新建工程。如果本地已经下载Huawei LiteOS的源代码,则可以通过Studio直接打开本地源代码,无需新建工程,参考Huawei LiteOS Studio打开工程。在Studio的“工程配置”→“目标板”窗口,列出了Hu - [烧录](https://support.huaweicloud.com/qs-LiteOS/zh-cn_topic_0308937185.md): 使用USB线连接开发板的USB转串口到电脑,并将JLink仿真器正确连接到电脑后,就可以使用JLink将系统镜像文件Huawei_LiteOS.bin烧录到开发板,烧录器配置以及烧录方法,请参考Studio烧录配置-烧录。 - [运行](https://support.huaweicloud.com/qs-LiteOS/zh-cn_topic_0308937186.md): 烧录成功后,点击串口终端图标打开串口终端界面,设置端口(请根据实际使用的串口端口号进行设置),开启串口开关,开发板按下复位RESET按钮,可以看到串口输出,接收区输出的内容就是Huawei LiteOS启动后运行“Kernel Task Demo”的输出,如下图所示:Huawei LiteOS默认打开了Shell组件,可以在串口终端的“发 - [简介](https://support.huaweicloud.com/qs-LiteOS/zh-cn_topic_0310122737.md): QEMU是一款通用的开源虚拟化模拟器,通过软件模拟硬件设备,当QEMU直接模拟CPU时,它能够独立运行操作系统,有关QEMU的介绍可参考https://github.com/qemu/qemu。realview-pbx-a9工程就是使用QEMU模拟Cortex-A9处理器,以运行Huawei LiteOS操作系统。 - [搭建开发环境](https://support.huaweicloud.com/qs-LiteOS/zh-cn_topic_0308937189.md): realview-pbx-a9工程在Linux下的开发环境包括编译环境和QEMU模拟器。搭建编译环境。请参考搭建Linux编译环境。请参考搭建Linux编译环境。安装QEMU模拟器。可以参考如下命令安装:$ apt-get install qemu $ apt-get install qemu-system除此之外,也可以通过QEMU源码 - [编译](https://support.huaweicloud.com/qs-LiteOS/zh-cn_topic_0308937190.md): 请下载完整的Huawei LiteOS代码,代码仓在gitee上,请选择master分支进行下载:LiteOS代码仓。在Huawei_LiteOS根目录下执行如下命令,拷贝realview-pbx-a9模拟器工程的.config文件:在Huawei_LiteOS根目录下执行make menuconfig命令,打开menuconfig的图形 - [运行](https://support.huaweicloud.com/qs-LiteOS/zh-cn_topic_0308937192.md): 可以参考如下命令,通过QEMU启动guest虚拟机运行Huawei LiteOS,因为realview-pbx-a9工程默认使能了SMP(多核),所以启动虚拟机时也需要设置-smp参数:$ qemu-system-arm -machine realview-pbx-a9 -smp 4 -m 512M -kernel out/realvie - [搭建开发环境](https://support.huaweicloud.com/qs-LiteOS/zh-cn_topic_0308937194.md): 访问Huawei LiteOS Studio下载链接获取最新发行版。参考搭建Windows开发环境,完成开发环境的搭建。 - [编译](https://support.huaweicloud.com/qs-LiteOS/zh-cn_topic_0308937195.md): 如果本地没有下载Huawei LiteOS的源代码,则需要新建工程,参考Huawei LiteOS Studio新建工程。如果本地已经下载Huawei LiteOS的源代码,则可以通过Studio直接打开本地源代码,无需新建工程,参考Huawei LiteOS Studio打开工程。打开Studio的“工程配置”→“目标板”窗口,选择“r - [运行](https://support.huaweicloud.com/qs-LiteOS/zh-cn_topic_0308937197.md): Huawei LiteOS Studio通过“烧录”功能启动QEMU虚拟机运行Huawei LiteOS。如何配置“烧录器”并运行Huawei LiteOS,可以参考启动realview-pbx-a9仿真工程。烧录成功后,自动启动Huawei LiteOS,可以在“终端”界面中看到如下输出,回车后既可进入Shell交互界面(出现“Huaw - [QEMU模拟器qemu-virt-a53](https://support.huaweicloud.com/qs-LiteOS/zh-cn_topic_0308937198.md): 即将适配支持,敬请期待。 ## 内核 - [内核架构](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0305675048.md): Huawei LiteOS基础内核包括不可裁剪的极小内核和可裁剪的其他模块。极小内核包含任务管理、内存管理、中断管理、异常管理和系统时钟。可裁剪的模块包括信号量、互斥锁、队列管理、事件管理、软件定时器等。 Huawei LiteOS支持 UP(单核)与 SMP(多核)模式,即支持在单核或者多核的环境上运行。 - [各模块简介](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0305675049.md): 任务管理提供任务的创建、删除、延迟、挂起、恢复等功能,以及锁定和解锁任务调度。支持任务按优先级高低的抢占调度以及同优先级时间片轮转调度。内存管理提供静态内存和动态内存两种算法,支持内存申请、释放。目前支持的内存管理算法有固定大小的BOX算法、动态申请的bestfit算法和bestfit_little算法。提供内存统计、内存越界检测功能。硬 - [内核启动流程](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0305675050.md): 华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。 - [使用约束](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0302339209.md): Huawei LiteOS提供一套自有 OS接口,同时也支持POSIX和CMSIS接口。请勿混用这些接口。混用接口可能导致不可预知的错误,例如:用POSIX接口申请信号量,但用Huawei LiteOS接口释放信号量。开发驱动程序只能用Huawei LiteOS的接口,上层APP建议用POSIX接口。 - [概述](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0145350125.md): 从系统角度看,任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源,并独立于其它任务运行。Huawei LiteOS的任务模块可以给用户提供多个任务,实现任务间的切换,帮助用户管理业务程序流程。Huawei LiteOS的任务模块具有如下特性:支持多任务。一个任务表示一个线程。抢占式调度机制,高优先级的任务可 - [开发指导](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018321.md): 任务创建后,内核可以执行锁任务调度,解锁任务调度,挂起,恢复,延时等操作,同时也可以设置任务优先级,获取任务优先级。Huawei LiteOS 的任务管理模块提供下面几种功能,接口详细信息可以查看API参考。可以通过make menuconfig配置LOSCFG_KERNEL_SMP使能多核模式( 菜单路径为Kernel ---> Ena - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018322.md): 执行Idle任务时,会对之前已删除任务的任务控制块和任务栈进行回收。任务名是指针,并没有分配空间,在设置任务名时,禁止将局部变量的地址赋值给任务名指针。任务栈的大小按16字节大小或者sizeof(UINTPTR) * 2对齐。确定任务栈大小的原则是,够用就行,多了浪费,少了任务栈溢出。挂起当前任务时,如果任务已经被锁定,则无法挂起。Idl - [编程实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018323.md): 本实例介绍基本的任务操作方法,包含2个不同优先级任务的创建、任务延时、任务锁与解锁调度、挂起和恢复等操作,阐述任务优先级调度的机制以及各接口的应用。前提条件:在menuconfig菜单中完成任务模块的配置。编译运行得到的结果为:sample_task.c - [编程实例 (SMP)](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018324.md): 本实例介绍基本的任务操作方法,包含任务创建、任务延时、任务锁与解锁调度、挂起和恢复等操作,阐述任务优先级调度的机制以及各接口的应用。创建了2个任务:TaskHi和TaskLo。TaskHi为高优先级任务, 绑定在当前测试任务的CPU上。TaskLo为低优先级任务,不设置亲和性即不绑核。由于TaskLo未设置亲和性,LOS_TaskLock - [概述](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018386.md): 内存管理模块管理系统的内存资源,它是操作系统的核心模块之一,主要包括内存的初始化、分配以及释放。在系统运行过程中,内存管理模块通过对内存的申请/释放来管理用户和OS对内存的使用,使内存的利用率和使用效率达到最优,同时最大限度地解决系统的内存碎片问题。Huawei LiteOS的内存管理分为静态内存管理和动态内存管理,提供内存初始化、分配、 - [开发指导](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018388.md): 动态内存管理的主要工作是动态分配并管理用户申请到的内存区间。动态内存管理主要用于用户需要使用大小不等的内存块的场景。当用户需要使用内存时,可以通过操作系统的动态内存申请函数索取指定大小的内存块,一旦使用完毕,通过动态内存释放函数归还所占用内存,使之可以重复使用。Huawei LiteOS系统中的动态内存管理模块为用户提供下面几种功能,接口 - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018389.md): 由于动态内存管理需要管理控制块数据结构来管理内存,这些数据结构会额外消耗内存,故实际用户可使用内存总量小于配置项OS_SYS_MEM_SIZE的大小。对齐分配内存接口LOS_MemAllocAlign/LOS_MemMallocAlign因为要进行地址对齐,可能会额外消耗部分内存,故存在一些遗失内存,当系统释放该对齐内存时,同时回收由于对 - [编程实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018390.md): 前提条件:在menuconfig菜单中完成动态内存的配置。本实例执行以下步骤:初始化一个动态内存池。从动态内存池中申请一个内存块。在内存块中存放一个数据。打印出内存块中的数据。释放该内存块。输出结果如下:sample_mem.c - [开发指导](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018392.md): 当用户需要使用固定长度的内存时,可以通过静态内存分配的方式获取内存,一旦使用完毕,通过静态内存释放函数归还所占用内存,使之可以重复使用。Huawei LiteOS的静态内存管理主要为用户提供以下功能,接口详细信息可以查看API参考。本节介绍使用静态内存的典型场景开发流程。执行make menuconfig命令,进入Kernel ---> - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018393.md): 静态内存池区域,如果是通过动态内存分配方式获得的,在不需要静态内存池时,需要释放该段内存,避免发生内存泄露。 - [编程实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018394.md): 前提条件:在menuconfig菜单中完成静态内存的配置。本实例执行以下步骤:初始化一个静态内存池。从静态内存池中申请一块静态内存。在内存块存放一个数据。打印出内存块中的数据。清除内存块中的数据。释放该内存块。输出结果如下:sample_membox.c - [概述](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018395.md): 中断是指出现需要时,CPU暂停执行当前程序,转而执行新程序的过程。即在程序运行过程中,出现了一个必须由CPU立即处理的事务。此时,CPU暂时中止当前程序的执行转而处理这个事务,这个过程就叫做中断。外设可以在没有CPU介入的情况下完成一定的工作,但某些情况下也需要CPU为其执行一定的工作。通过中断机制,在外设不需要CPU介入时,CPU可以执 - [开发指导](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018396.md): 当有中断请求产生时,CPU暂停当前的任务,转而去响应外设请求。根据需要,用户通过中断申请,注册中断处理程序,可以指定CPU响应中断请求时所执行的具体操作。Huawei LiteOS 的中断模块为用户提供下面几种功能,接口详细信息可以查看API参考。对存在失败可能性的操作返回对应的错误码,以便快速定位错误原因。错误码定义见错误码简介。8~1 - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0145350142.md): 根据具体硬件,配置支持的最大中断数及可设置的中断优先级个数。中断共享机制,支持不同的设备使用相同的中断号注册同一中断处理程序,但中断处理程序的入参pDevId(设备号)必须唯一,代表不同的设备。即同一中断号,同一dev只能挂载一次;但同一中断号,同一中断处理程序,dev不同则可以重复挂载。中断处理程序耗时不能过长,否则会影响CPU对中断的 - [编程实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018397.md): 本实例实现如下功能:创建中断。设置中断亲和性。使能中断。触发中断。屏蔽中断。删除中断。前提条件:menuconfig菜单中配置中断使用最大数、配置可设置的中断优先级个数。代码实现如下:sample_hwi.c - [概述](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018399.md): 异常接管是操作系统对运行期间发生的异常情况(芯片硬件异常)进行处理的一系列动作,例如打印异常发生时当前函数的调用栈信息、CPU现场信息、任务的堆栈情况等。异常接管作为一种调测手段,可以在系统发生异常时给用户提供有用的异常信息,譬如异常类型、发生异常时的系统状态等,方便用户定位分析问题。Huawei LiteOS的异常接管,在系统发生异常时 - [使用指南](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018400.md): 异常接管对系统运行期间发生的芯片硬件异常进行处理,不同芯片的异常类型存在差异,具体异常类型可以查看芯片手册。异常接管一般的定位步骤如下:打开编译后生成的镜像反汇编(asm)文件。搜索PC指针(指向当前正在执行的指令)在asm中的位置,找到发生异常的函数。根据LR值查找异常函数的父函数。重复步骤3,得到函数间的调用关系,找到异常原因。具体的 - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018401.md): 要查看调用栈信息,必须添加编译选项宏-fno-omit-frame-pointer支持stack frame,否则编译时FP寄存器是关闭的。 - [问题定位实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018402.md): 在某ARM32平台上通过错误释放内存,触发系统异常。系统异常被挂起后,能在串口中看到异常调用栈打印信息和关键寄存器信息,如下所示,其中excType表示异常类型,此处值为4表示数据终止异常,其它数值可以查看芯片手册。通过这些信息可以定位到异常所在函数和其调用栈关系,为分析异常原因提供第一手资料。定位步骤如下:打开编译后生成的 asm 反汇 - [概述](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018404.md): 错误处理指程序运行错误时,调用错误处理模块的接口函数,上报错误信息,并调用注册的钩子函数进行特定处理,保存现场以便定位问题。通过错误处理,可以控制和提示程序中的非法输入,防止程序崩溃。错误处理是一种机制,用于处理异常状况。当程序出现错误时,会显示相应的错误码。此外,如果注册了相应的错误处理函数,则会执行这个函数。 - [开发指导](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018405.md): 调用API接口时可能会出现错误,此时接口会返回对应的错误码,以便快速定位错误原因。错误码是一个32位的无符号整型数,31~24位表示错误等级,23~16位表示错误码标志(当前该标志值为0),15~8位代表错误码所属模块,7~0位表示错误码序号。例如将任务模块中的错误码LOS_ERRNO_TSK_NO_MEMORY定义为FATAL级别的错误 - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018406.md): 系统中只有一个错误处理的钩子函数。当多次注册钩子函数时,最后一次注册的钩子函数会覆盖前一次注册的函数。 - [编程实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018407.md): 在下面的例子中,演示如下功能:注册错误处理钩子函数。执行错误处理函数。代码实现如下:编译运行得到的结果为:sample_err.c - [概述](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018408.md): 队列又称消息队列,是一种常用于任务间通信的数据结构。队列接收来自任务或中断的不固定长度消息,并根据不同的接口确定传递的消息是否存放在队列空间中。任务能够从队列里面读取消息,当队列中的消息为空时,挂起读取任务;当队列中有新消息时,挂起的读取任务被唤醒并处理新消息。任务也能够往队列里写入消息,当队列已经写满消息时,挂起写入任务;当队列中有空闲 - [开发指导](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0145350146.md): 队列用于任务间通信,可以实现消息的异步处理。同时消息的发送方和接收方不需要彼此联系,两者间是解耦的。Huawei LiteOS中的队列模块提供下面几种功能,接口详细信息可以查看API参考。对存在失败可能性的操作返回对应的错误码,以便快速定位错误原因。错误码定义见错误码简介。8~15位的所属模块为队列模块,值为0x06。队列模块中的错误码序 - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311040151.md): 系统支持的最大队列数是指:整个系统的队列资源总个数,而非用户能使用的个数。例如:系统软件定时器多占用一个队列资源,那么用户能使用的队列资源就会减少一个。创建队列时传入的队列名和flags暂时未使用,作为以后的预留参数。队列接口函数中的入参timeout是相对时间。LOS_QueueReadCopy和LOS_QueueWriteCopy及L - [编程实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311040152.md): 创建一个队列,两个任务。任务1调用写队列接口发送消息,任务2通过读队列接口接收消息。通过LOS_TaskCreate创建任务1和任务2。通过LOS_QueueCreate创建一个消息队列。在任务1 send_Entry中发送消息。在任务2 recv_Entry中接收消息。通过LOS_QueueDelete删除队列。前提条件:在menu - [概述](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018410.md): 事件(Event)是一种任务间通信的机制,可用于任务间的同步。多任务环境下,任务之间往往需要同步操作,一个等待即是一个同步。事件可以提供一对多、多对多的同步操作。一对多同步模型:一个任务等待多个事件的触发。可以是任意一个事件发生时唤醒任务处理事件,也可以是几个事件都发生后才唤醒任务处理事件。多对多同步模型:多个任务等待多个事件的触发。Hu - [开发指导](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018411.md): 事件可应用于多种任务同步场景,在某些同步场景下可替代信号量。Huawei LiteOS 的事件模块为用户提供下面几种功能,接口详细信息可以查看API参考。对存在失败可能性的操作返回对应的错误码,以便快速定位错误原因。错误码定义见错误码简介。8~15位的所属模块为事件模块,值为0x1c。使用事件模块的典型流程如下:执行make menuco - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018412.md): 在系统初始化之前不能调用读写事件接口。如果调用,系统运行会不正常。在中断中,可以对事件对象进行写操作,但不能进行读操作。在锁任务调度状态下,禁止任务阻塞于读事件。LOS_EventClear 入参值是:要清除的指定事件类型的反码(~events)。为了区别LOS_EventRead接口返回的是事件还是错误码,事件掩码的第25位不能使用。 - [编程实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018413.md): 示例中,任务Example_TaskEntry创建一个任务Example_Event,Example_Event读事件阻塞,Example_TaskEntry向该任务写事件。可以通过示例日志中打印的先后顺序理解事件操作时伴随的任务切换。在任务Example_TaskEntry创建任务Example_Event,其中任务Example_Ev - [概述](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018415.md): 信号量(Semaphore)是一种实现任务间通信的机制,可以实现任务间同步或共享资源的互斥访问。一个信号量的数据结构中,通常有一个计数值,用于对有效资源数的计数,表示剩下的可被使用的共享资源数,其值的含义分两种情况:0,表示该信号量当前不可获取,因此可能存在正在等待该信号量的任务。正值,表示该信号量当前可被获取。以同步为目的的信号量和以互 - [开发指导](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018416.md): 在多任务系统中,信号量是一种非常灵活的同步方式,可以运用在多种场合中,实现锁、同步、资源计数等功能,也能方便的用于任务与任务,中断与任务的同步中。信号量常用于协助一组相互竞争的任务访问共享资源。Huawei LiteOS 的信号量模块为用户提供下面几种功能,接口详细信息可以查看API参考。信号量有三种申请模式:无阻塞模式、永久阻塞模式、定 - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018417.md): 由于中断不能被阻塞,因此不能在中断中使用阻塞模式申请信号量。 - [编程实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018418.md): 本实例实现如下功能:测试任务Example_TaskEntry创建一个信号量,锁任务调度,创建两个任务Example_SemTask1、Example_SemTask2,Example_SemTask2优先级高于Example_SemTask1,两个任务中申请同一信号量,解锁任务调度后两任务阻塞,测试任务Example_TaskEntry - [概述](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018420.md): 互斥锁又称互斥型信号量,是一种特殊的二值性信号量,用于实现对临界资源的独占式处理。另外,互斥锁可以解决信号量存在的优先级翻转问题。任意时刻互斥锁只有两种状态,开锁或闭锁。当任务持有时,这个任务获得该互斥锁的所有权,互斥锁处于闭锁状态。当该任务释放锁后,任务失去该互斥锁的所有权,互斥锁处于开锁状态。当一个任务持有互斥锁时,其他任务不能再对该 - [开发指导](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018421.md): 多任务环境下往往存在多个任务竞争同一临界资源的应用场景,互斥锁可以提供任务间的互斥机制,防止两个任务在同一时刻访问相同的临界资源,从而实现独占式访问。Huawei LiteOS 的互斥锁模块为用户提供下面几种功能,接口详细信息可以查看API参考。申请互斥锁有三种模式:无阻塞模式、永久阻塞模式、定时阻塞模式。无阻塞模式:即任务申请互斥锁时, - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018422.md): 互斥锁不能在中断服务程序中使用。Huawei LiteOS作为实时操作系统需要保证任务调度的实时性,尽量避免任务的长时间阻塞,因此在获得互斥锁之后,应该尽快释放互斥锁。持有互斥锁的过程中,不得再调用LOS_TaskPriSet等接口更改持有互斥锁任务的优先级。互斥锁不支持多个相同优先级任务翻转的场景。 - [编程实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018423.md): 本实例实现如下流程。任务Example_TaskEntry创建一个互斥锁,锁任务调度,创建两个任务Example_MutexTask1、Example_MutexTask2。Example_MutexTask2优先级高于Example_MutexTask1,解锁任务调度,然后Example_TaskEntry任务休眠300Tick。Exa - [概述](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018425.md): 软件定时器,是基于系统Tick时钟中断且由软件来模拟的定时器。当经过设定的Tick数后,会触发用户自定义的回调函数。硬件定时器受硬件的限制,数量上不足以满足用户的实际需求。因此为了满足用户需求,提供更多的定时器,Huawei LiteOS提供了软件定时器功能,支持如下特性:创建软件定时器。启动软件定时器。停止软件定时器。删除软件定时器。获 - [开发指导](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018426.md): 创建一个单次触发的定时器,超时后执行用户自定义的回调函数。创建一个周期性触发的定时器,超时后执行用户自定义的回调函数。Huawei LiteOS的软件定时器模块为用户提供下面几种功能,接口详细信息可以查看API参考。对存在失败可能性的操作返回对应的错误码,以便快速定位错误原因。错误码定义见错误码简介。8~15位的所属模块为软件定时器模块, - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018427.md): 软件定时器的回调函数中不应执行过多操作,不建议使用可能引起任务挂起或者阻塞的接口或操作,如果使用会导致软件定时器响应不及时,造成的影响无法确定。软件定时器使用了系统的一个队列和一个任务资源。软件定时器任务的优先级设定为0,且不允许修改 。系统可配置的软件定时器个数是指:整个系统可使用的软件定时器总个数,并非用户可使用的软件定时器个数。例如 - [编程实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018428.md): 在下面的例子中,演示如下功能:软件定时器创建、启动、停止、删除操作。单次软件定时器,周期软件定时器使用方法。前提条件:在menuconfig菜单中完成软件定时器的配置。代码实现如下:得到的结果为:sample_Timer.c - [概述](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018430.md): 在多核环境中,由于使用相同的内存空间,存在对同一资源进行访问的情况,所以需要互斥访问机制来保证同一时刻只有一个核进行操作。自旋锁就是这样的一种机制。自旋锁是指当一个线程在获取锁时,如果锁已经被其它线程获取,那么该线程将循环等待,并不断判断是否能够成功获取锁,直到获取到锁才会退出循环。因此建议保护耗时较短的操作,防止对系统整体性能有明显的影 - [开发指南](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018431.md): 自旋锁可以提供任务之间的互斥访问机制,用来防止两个任务在同一时刻访问相同的共享资源。Huawei LiteOS 的自旋锁模块为用户提供下面几种功能,接口详细信息可以查看API参考。自旋锁的开发典型流程:自旋锁依赖于SMP,可以通过make menuconfig配置,配置项的菜单路径为:Kernel ---> Enable Kernel S - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018432.md): 同一个任务不能对同一把自旋锁进行多次加锁,否则会导致死锁。自旋锁中会执行本核的锁任务操作,因此需要等到最外层完成解锁后本核才会进行任务调度。LOS_SpinLock与LOS_SpinUnlock允许单独使用,即可以不进行关中断,但是用户需要保证使用的接口只会在任务或中断中使用。如果接口同时会在任务和中断中被调用,请使用LOS_SpinLo - [编程实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018433.md): 本实例实现如下流程。任务Example_TaskEntry初始化自旋锁,创建两个任务Example_SpinTask1、Example_SpinTask2,分别运行于两个核。Example_SpinTask1、Example_SpinTask2中均执行申请自旋锁的操作,同时为了模拟实际操作,在持有自旋锁后进行延迟操作,最后释放自旋锁。30 - [概述](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0302389227.md): C++作为目前使用最广泛的编程语言之一,支持类、封装、重载等特性,是在C语言基础上开发的一种面向对象的编程语言。STL(Standard Template Library)标准模板库,是一些“容器”的集合,也是算法和其他一些组件的集合。其目的是标准化组件,使用标准化组件后可以不用重新开发,直接使用现成的组件。 - [开发指导](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0302389228.md): 该函数有3个入参:第一个参数:init_array段的起始地址。第二个参数:init_array段的结束地址。第三个参数:标记调用C++特性时的场景,包括BEFORE_SCATTER(在分散加载快速启动阶段使用C++特性)、AFTER_SCATTER(在分散加载非快速启动阶段使用C++特性)、NO_SCATTER(在非分散加载特性中使用C - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0302389229.md): Huawei LiteOS的C++功能需要编译器适配才能支持,编译器编译链接C++代码时需要使用Huawei LiteOS提供的C库。 - [编程实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0302389230.md): 本实例实现了在Huawei LiteOS上运行C++的代码。编写C++代码。在运行C++代码之前,先在app_init函数里以NO_SCATTER参数调用LOS_CppSystemInit初始化C++构造函数。在LOS_CppSystemInit之后调用编写好的C++代码。前提条件:通过make menuconfig使能C++支持。C++ - [概述](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018436.md): 时间管理以系统时钟为基础,给应用程序提供所有和时间有关的服务。系统时钟是由定时器/计数器产生的输出脉冲触发中断产生的,一般定义为整数或长整数。输出脉冲的周期叫做一个“时钟滴答”。系统时钟也称为时标或者Tick。用户以秒、毫秒为单位计时,而操作系统以Tick为单位计时,当用户需要对系统进行操作时,例如任务挂起、延时等,此时需要时间管理模块对 - [开发指导](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018437.md): 用户需要了解当前系统运行的时间以及Tick与秒、毫秒之间的转换关系等。Huawei LiteOS的时间管理提供下面几种功能,接口详细信息可以查看API参考。时间转换存在出错的可能性,需要返回对应的错误码,以便快速定位错误原因。时间管理的典型开发流程:根据实际需求,在板级配置适配时确认是否使能LOSCFG_BASE_CORE_TICK_HW - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018438.md): 时间管理不是单独的功能模块,依赖于OS_SYS_CLOCK和LOSCFG_BASE_CORE_TICK_PER_SECOND两个配置选项。系统的Tick数在关中断的情况下不进行计数,故系统Tick数不能作为准确时间使用。 - [编程实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018439.md): 在下面的例子中,介绍了时间管理的基本方法,包括:时间转换:将毫秒数转换为Tick数,或将Tick数转换为毫秒数。时间统计:每Tick的Cycle数、自系统启动以来的Tick数和延迟后的Tick数。前提条件:使用每秒的Tick数LOSCFG_BASE_CORE_TICK_PER_SECOND的默认值100。配好OS_SYS_CLOCK系统主 - [概述](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018441.md): 双向链表是指含有往前和往后两个方向的链表,即每个结点中除存放下一个节点指针外,还增加一个指向前一个节点的指针。其头指针head是唯一确定的。从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点,这种数据结构形式使得双向链表在查找时更加方便,特别是大量数据的遍历。由于双向链表具有对称性,能方便地完成各种插入、删除等操作, - [开发指导](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018442.md): Huawei LiteOS的双向链表模块为用户提供下面几种功能,接口详细信息可以查看API参考。双向链表的典型开发流程:调用LOS_ListInit/LOS_DL_LIST_HEAD初始双向链表。调用LOS_ListAdd/LOS_ListHeadInsert向链表头部插入节点。调用LOS_ListTailInsert向链表尾部插入节点。 - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018443.md): 需要注意节点指针前后方向的操作。链表操作接口,为底层接口,不对入参进行判空,需要使用者确保传参合法。如果链表节点的内存是动态申请的,删除节点时,要注意释放内存。 - [编程实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018444.md): 本实例实现如下功能:初始化双向链表。增加节点。删除节点。测试操作是否成功。代码实现如下:编译运行得到的结果为: - [概述](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018446.md): 在支持多任务的操作系统中,修改一块内存区域的数据需要“读取-修改-写入”三个步骤。然而同一内存区域的数据可能同时被多个任务访问,如果在修改数据的过程中被其他任务打断,就会造成该操作的执行结果无法预知。使用开关中断的方法固然可以保证多任务执行结果符合预期,但这种方法显然会影响系统性能。ARMv6架构引入了LDREX和STREX指令,以支持对 - [开发指导](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018447.md): 有多个任务对同一个内存数据进行加减或交换操作时,使用原子操作保证结果的可预知性。Huawei LiteOS的原子数据包含两种类型Atomic(有符号32位数)与 Atomic64(有符号64位数)。原子操作模块为用户提供下面几种功能,接口详细信息可以查看API参考。原子操作中,操作数及其结果不能超过函数所支持位数的最大值。无。 - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018448.md): 目前原子操作接口只支持整型数据。 - [编程实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018449.md): 调用原子操作相关接口,观察结果:任务一用LOS_AtomicInc对全局变量加100次。任务二用LOS_AtomicDec对全局变量减100次。sample_atomic.c - [概述](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018451.md): 位操作是指对二进制数的bit位进行操作。程序可以设置某一变量为状态字,状态字中的每一bit位(标志位)可以具有自定义的含义。 - [开发指南](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018452.md): 系统提供标志位的置1和清0操作,可以改变标志位的内容,同时还提供获取状态字中标志位为1的最高位和最低位的功能。用户也可以对系统的寄存器进行位操作。Huawei LiteOS的位操作模块为用户提供下面几种功能,接口详细信息可以查看API参考。 - [注意事项](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018453.md): 无。 - [编程实例](https://support.huaweicloud.com/kernelmanual-LiteOS/zh-cn_topic_0311018454.md): 对数据实现位操作,本实例实现如下功能:某一标志位置1。获取标志位为1的最高bit位。某一标志位清0。获取标志位为1的最低bit位。编译运行得到结果: ## 功能组件 - [概述](https://support.huaweicloud.com/component-LiteOS/zh-cn_topic_0257166023.md): Huawei LiteOS传感框架即Sensor Hub,是一个基于LiteOS的传感器管理框架,核心部分是Sensor Manager,提供统一的传感器交互管理,如传感器(Sensor)的配置、采样、上报。 - [开发指导](https://support.huaweicloud.com/component-LiteOS/zh-cn_topic_0257166024.md): Huawei LiteOS传感框架非常灵活方便,可以运用在多种终端设备中,例如穿戴设备、智能家居设备、家用医疗设备等。Sensor Manager提供以下功能。SensorType结构体:SensorItem结构体:使用Sensor Manager管理某一类别传感器典型流程如下:通过make menuconfig配置传感框架,菜单路径为: - [注意事项](https://support.huaweicloud.com/component-LiteOS/zh-cn_topic_0257176491.md): 传感器应用采样周期参数为tick数,需结合Huawei LiteOS节拍计算物理时间。传感器驱动需使用者根据传感器数据手册自己适配,在实际项目中,如果多传感器挂在相同总线上,需要设计硬件资源保护,例如相同I2C总线挂载多个传感器从设备,操作传感器时首先要获取I2C总线读写权限。 - [编程实例](https://support.huaweicloud.com/component-LiteOS/zh-cn_topic_0257176492.md): 基于野火挑战者开发板(Cloud_STM32F429IGTx_FIRE)开发应用定时读取MPU6050传感器的原始数据。MPU6050是一种六轴传感器模块,能同时检测三轴加速度、三轴陀螺仪(角加速度)、温度。本实例中提供的传感器驱动和应用代码仅对使用传感框架读取传感器做基本设计和实现,仅做参考。初始化陀螺仪标签类别的两个应用g_gyroI - [概述](https://support.huaweicloud.com/component-LiteOS/zh-cn_topic_0257163006.md): 越来越多物联网智能设备如智能家电、智能手表、智能仪表上会涉及到嵌入式GUI开发。在此背景下,Huawei LiteOS基于开源LittlevGL集成了完整的GUI开发框架,给开发者提供了众多方便使用的API,能够设计出精美的图形界面。目前Huawei LiteOS已支持STM32F769IDISCOVERY开发板。LittlevGL是面向 - [快速入门](https://support.huaweicloud.com/component-LiteOS/zh-cn_topic_0257163007.md): 目前在STM32F769IDISCOVERY开发板上已经移植LittevGL,并提供了Demo示例演示LittlevGL图形库的功能和效果。下面将基于Linux x86_64(Ubuntu)开发环境,介绍在STM32F769IDISCOVERY上进行嵌入式GUI的开发步骤。请下载完整的LiteOS代码,其代码仓在gitee上的下载地址:L - [开发指导](https://support.huaweicloud.com/component-LiteOS/zh-cn_topic_0257163008.md): 如果需要在STM32xxx之外的其他运行Huawei LiteOS的嵌入式设备上移植LittlevGL,请在开发应用程序之前,根据设备提供的不同能力适配底层驱动(类似的工作我们已经在STM32F769IDISCOVERY上实现)。主要需要适配的内容有:显示驱动适配、输入驱动适配、tick适配、任务适配,适配的方法可以参考官方文档Littl ## 维测指南 - [概述](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244420.md): Huawei LiteOS的CPUP(Central Processing Unit Percent,CPU占用率)分为系统CPU占用率和任务CPU占用率。系统CPU占用率是指周期时间内系统的CPU占用率,用于表示系统一段时间内的闲忙程度,也表示CPU的负载情况。任务CPU占用率指单个任务的CPU占用率,用于表示单个任务在一段时间内的闲忙 - [开发指导](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244421.md): 通过系统CPU占用率,判断当前系统负载是否超出设计规格。通过系统中各个任务的CPU占用率,判断各个任务的CPU占用率是否符合设计的预期。Huawei LiteOS的CPU占用率模块为用户提供下面几种功能,接口详细信息可以查看API参考。通过上述接口获取到的CPU占用率是千分比,所以CPU占用率的有效表示范围为0~1000。系统CPU占用率 - [注意事项](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244422.md): CPU占用率对性能有一定影响,而一般只有在产品开发时需要了解各个任务的占用率,因此建议在发布产品时,关闭CPU占用率。关闭配置项LOSCFG_CPUP_INCLUDE_IRQ后,系统中的中断耗时会被统计到中断发生的任务中。 - [编程实例](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244423.md): 本实例实现如下功能:创建一个测试CPUP的任务。获取系统最近1s内所有任务或中断的CPUP。获取系统(除idel任务外)最近10s内的总CPU占用率。获取CPUP测试任务的CPUP。前提条件:通过make menuconfig配置好CPU占用率模块。代码实现如下:编译运行得到的结果为:sample_cpup.c - [概述](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244425.md): Trace即追踪,实时记录系统行为,类似系统“录像”功能。在系统发生异常后,能辅助用户查看历史事件,定位问题。Huawei LiteOS的Trace采用静态代码打桩和缓冲区记录方式,在桩被执行时,获取事件发生的上下文,并写入到缓冲区。插桩函数的入参中需要提供追踪的事件类型,事件操作的主体对象,事件的参数,这些信息会被写入缓冲区,同时缓冲区 - [开发指导](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244426.md): 通过Trace了解系统运转的轨迹,理解系统。通过Trace分析系统发生异常前的操作,定位死机问题。Huawei LiteOS的Trace模块为用户提供下面几种功能,接口详细信息可以查看API参考。LOS_TRACE_EASY(TYPE, IDENTITY, params...) 简易插桩。一句话插桩,用户在目标源代码中插入该接口即可。TY - [注意事项](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244427.md): 由于Trace会影响系统性能,同时考虑到一般只有在产品开发时才需要了解系统发生的事件,因此建议在产品发布时关闭Trace。 - [编程实例](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244428.md): 本实例实现如下功能:创建一个用于Trace测试的任务。设置事件掩码。启动trace。停止trace。格式化输出trace数据。前提条件:在menuconfig菜单中完成Trace模块的配置。代码实现如下:编译运行得到的结果为:两段数据分别为任务信息和事件信息。任务信息:任务id, 任务优先级, 任务名称。事件信息:发生时间、事件类型、在哪 - [概述](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244430.md): LMS全称为Lite Memory Sanitizer,是一种实时检测内存操作合法性的调测工具。LMS能够实时检测缓冲区溢出(buffer overflow),释放后使用(use after free)和释放野指针(wild pointer),在异常发生的第一时间通知操作系统,结合操作系统Backtrace等定位手段,能准确定位到产生内存 - [使用指南](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244431.md): 疑似系统内存问题需要定位时。开发过程中需要验证是否存在内存问题时。在被检测模块的Makefile文件里,增加LMS检测编译选项-fsanitize=kernel-address。为避免编译器优化,通过menuconfig配置编译器不优化:LOSCFG_COMPILER_OPTIMIZE_NONE=y 【Compiler --> Optim - [注意事项](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244432.md): LMS属于调测特性,在产品发布时,需关闭LMS模块的裁剪开关LOSCFG_KERNEL_LMS,删除LMS检测编译选项-fsanitize=kernel-address,恢复为开启LMS特性打开的其他配置项,参见使用流程。如果被检测的模块有大量堆内存读写操作,需要增加任务栈大小。内存模块和LMS模块不需要增加LMS检测编译选项-fsani - [概述](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0302395692.md): Huawei LiteOS提供Shell命令行,它能够以命令行交互的方式访问操作系统的功能或服务:它接收并解析用户输入的命令,并处理操作系统的输出结果。 - [开发指导](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0302395693.md): Huawei LiteOS提供的Shell作为在线调试工具,可以通过串口工具输入输出,支持常用的基本调试功能。同时用户可以新增定制的命令,新增命令需重新编译烧录后才能执行。Huawei LiteOS提供的Shell命令参见后面“命令参考”章节。Huawei LiteOS的Shell模块为用户提供下面几个接口,接口详细信息可以查看API参考 - [静态注册编程实例](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409019.md): 本实例演示如何使用静态注册命令方式新增一个名为test的Shell命令。定义一个新增命令所要调用的命令处理函数cmd_test。使用SHELLCMD_ENTRY函数添加新增命令项。在liteos_tables_ldflags.mk中添加链接该新增命令项参数。通过make menuconfig使能Shell。重新编译代码后运行。定义命令所要 - [动态注册编程实例](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409020.md): 本实例演示如何使用动态注册命令方式新增一个名为test的Shell命令。定义一个新增命令所要调用的命令处理函数cmd_test。使用osCmdReg函数添加新增命令项。通过make menuconfig使能Shell。重新编译代码后运行。定义命令所要调用的命令处理函数cmd_test:#include "shell.h" #include - [使能系统命令](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0316294727.md): 使用Shell中的系统命令前,需要先通过make menuconfig使能Shell,详见配置项。 - [help](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409022.md): help命令用于显示当前操作系统内所有的Shell命令。help举例:输入help。执行help,输出当前系统内的所有Shell命令: - [date](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409023.md): date命令用于查询及设置系统时间。datedate --helpdate +Formatdate -s YY/MM/DDdate -s hh:mm:ssdate -r Filename(开源版本暂不支持该命令)date参数缺省时,默认显示当前系统时间。--help、+Format、-s、-r不能混合使用。举例:输入dat - [uname](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409024.md): uname命令用于显示操作系统的名称,系统编译时间,版本信息等。uname [-a|-s|-t|-v | --help]参数缺省时,默认显示操作系统名称。uname的参数不能混合使用。举例:输入uname -a。执行uname -a,获取系统信息: - [task](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409045.md): task命令用于查询系统任务信息。task[ID]参数缺省时,默认打印全部运行任务信息。task后加ID,当ID参数在[0, 64]范围内时,返回指定ID号任务的任务名、任务ID、任务的调用栈信息(最大支持15层调用栈),其他取值时返回参数错误的提示。如果指定ID号对应的任务未创建,则提示。如果在task命令中,发现任务是Invalid状 - [free](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409046.md): free命令可显示系统内存的使用情况,同时显示系统的text段、data段、rodata段、bss段大小。free [-k| -m]输入free显示内存使用情况,total表示系统动态内存池的总大小,used表示已使用的内存大小,free表示空闲的内存大小。text表示代码段大小,data表示数据段大小,rodata表示只读数据段大小,b - [memcheck](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409047.md): 检查动态申请的内存块是否完整,是否存在内存越界造成的节点损坏。memcheck打开内存完整性检查开关。目前只有bestfit内存管理算法支持该命令,需要使能LOSCFG_KERNEL_MEM_BESTFIT:Kernel ---> Memory Management ---> Dynamic Memory Management Algor - [memused](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409048.md): memused命令用于查看当前系统used节点中保存的函数调用栈LR信息。通过分析数据可检测内存泄露问题。memused通过make menuconfig打开内存泄漏检测。目前只有bestfit内存管理算法支持该功能,需要使能LOSCFG_KERNEL_MEM_BESTFIT。Kernel ---> Memory Management - - [hwi](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409049.md): hwi命令用于查询当前中断信息。hwi输入hwi即显示当前中断号、中断次数及注册中断名称。若打开宏开关LOSCFG_CPUP_INCLUDE_IRQ,还会显示各个中断的处理时间(cycles)、CPU占用率以及中断类型。该宏开关可以通过make menuconfig在菜单项中开启Enable Cpup include irq使能:Kern - [queue](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409050.md): queue命令用于查看队列的使用情况。queue该命令依赖于LOSCFG_DEBUG_QUEUE,使用时需要在配置项中开启"Enable Queue Debugging"。举例:输入queue。上图中各项含义如下: - [sem](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409051.md): sem命令用于查询系统内核信号量的相关信息。sem [ID]sem fulldata参数缺省时,显示所有信号量的使用数及信号量总数。sem后加ID,当ID参数在[0, 1023]范围内时,返回指定ID号的信号量使用数(如果指定ID号的信号量未被使用则提示),其他取值时返回参数错误的提示。sem的参数ID和fulldata不可以混用。参数f - [mutex](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409052.md): mutex命令用于查看互斥锁的使用情况。mutex该命令依赖于LOSCFG_DEBUG_MUTEX,该宏开关可以通过make menuconfig在菜单项中开启"Enable Mutex Debugging"使能。举例:输入mutex。执行mutex输出互斥锁使用情况:以上各主要输出项含义如下: - [dlock](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409053.md): dlock命令用于检查系统中的任务是否存在互斥锁(Mutex)死锁,其会输出系统中所有任务持有互斥锁的信息。dlock该命令需使能LOSCFG_DEBUG_DEADLOCK,使能方式可以通过make menuconfig在菜单项中开启Enable Mutex Deadlock Debugging。Debug ---> Enable a D - [swtmr](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409054.md): swtmr命令用于查询系统软件定时器的相关信息。swtmr [ID]参数缺省时,默认显示所有软件定时器的相关信息。swtmr后加ID号时,当ID在[0, 当前软件定时器个数 - 1]范围内时,返回对应ID的软件定时器的相关信息,其他取值时返回错误提示。举例:输入swtmr和swtmr 1。执行swtmr查询软件定时器相关信息,输出如下:执 - [systeminfo](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409055.md): systeminfo命令用于显示当前操作系统的资源使用情况,包括任务、信号量、互斥锁、队列、软件定时器等。对于信号量、互斥锁、队列和软件定时器,如果在系统镜像中已经裁剪了这些模块,那么说明系统没有使用这些资源,该命令也就不会显示这些资源的情况。systeminfo举例:输入systeminfo。执行systeminfo查看系统资源使用情况 - [log](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409056.md): log命令用于修改&查询系统的日志打印等级。log level [levelNum]暂不支持设置module、path。该命令依赖于LOSCFG_SHELL_LK,可以通过make menuconfig在菜单项中开启"Enable Shell lk"使能。Debug ---> Enable a Debug Version ---> En - [dmesg](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409057.md): dmesg命令用于控制内核dmesg缓存区。dmesgdmesg [-c | -C | -D | -E | -L | -U]dmesg -s dmesg -l dmesg > file(开源版本暂不支持该命令)写入文件需确保已挂载文件系统。关闭串口打印会影响Shell使用,建议先连接Telnet再尝试关闭串口。该 - [stack](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409058.md): stack命令用于显示当前操作系统内所有栈的信息。stack该功能默认开启。举例:输入stack。执行stack命令查看系统内所有栈的信息: - [cpup](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409059.md): cpup命令用于查询系统CPU的占用率,并以百分比显示占用率。cpup [mode] [taskID]参数缺省时,显示系统最近10s的CPU占用率。只输入一个参数时,该参数为mode,显示系统相应时间的CPU占用率。输入两个参数时,第一个参数为mode,第二个参数为taskID,显示指定任务ID的任务在相应时间的CPU占用率。该功能需要使 - [watch](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409060.md): watch命令用于周期性监听一个命令的运行结果。watch [-c | -n | -t | --count | --interval | -no-title] watch --overcommand参数必须是Shell命令,对于非Shell命令,会有错误提示“command is not fount”。如果要监听命令,c - [使能动态加载命令](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0316294728.md): 若要运行动态加载相关的Shell命令,需要事先完成动态加载模块的初始化,具体说明查看扩展内核-动态加载章节。使用Shell中的动态加载命令前,需要先通过make menuconfig使能Shell,详见配置项。并配置动态加载模块,详见4.1.2-1配置动态加载。 - [trace_start](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409062.md): 开启Trace。trace_start输入trace_start即开启系统Trace功能,离线模式下会记录系统发生的事件并保存在指定buffer中。举例:开启系统Trace功能,输入trace_start。在离线模式下,成功执行trace_start命令后,不会输出信息。 - [trace_stop](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409063.md): 停止Trace。trace_stop输入trace_stop即终止系统Trace功能, 停止记录事件。举例:停止系统Trace功能,输入trace_stop。成功执行trace_stop命令后,不会输出信息。 - [trace_mask](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409064.md): 设置事件过滤掩码。trace_mask [MASK]如果不设置事件掩码,或者执行该命令时参数缺省,则默认仅开启任务和中断事件记录。trace_mask后加MASK,则开启对应模块的事件记录。举例:输入trace_mask 0输入trace_mask 0xFFFFFFFF执行trace_mask 0,设置所有模块的事件都不记录,命令执行成功 - [trace_dump](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409065.md): 在离线模式下,dump出Trace buffer的信息。trace_dump [1 | 0]只能在离线模式下使用trace_dump命令。参数缺省时将格式化打印Trace数据。trace_dump命令打印的是trace_start和trace_stop之间的数据,所以需要先执行trace_stop停止Trace后,再执行trace_dum - [trace_reset](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312409066.md): 在离线模式下,清除Trace buffer中的事件数据。trace_reset只能在离线模式下使用trace_reset命令。举例:输入 trace_reset。执行trace_reset,清除事件数据: - [调度统计](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244433.md): 用于统计CPU的一些调度信息,包括idle任务启动时间、idle任务运行时长、调度切次数等。OsShellStatisticsStart---调度统计功能开启函数。OsShellStatisticsStop---调度统计功能关闭函数。关闭后,会自动调用OsStatisticsShow输出调度统计信息。OsShellCmdDumpSched - [多模块内存统计](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244435.md): 系统业务模块化清晰,用户需统计各模块的内存占用情况。Huawei LiteOS提供了一套基于内核内存接口的封装接口,增加模块ID作为入参。不同业务模块进行内存操作时,调用对应封装接口,可统计各模块的内存使用情况,并通过模块ID获取指定模块的内存使用情况。通过make menuconfig打开多模块内存统计功能。目前只有bestfit内存管 - [多内存池机制](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244436.md): 系统中使用多个动态内存池时,需对各内存池进行管理和使用情况统计。系统内存机制中通过链表实现对多个内存池的管理。内存池需回收时可调用对应接口进行去初始化。通过多内存池机制,可以获取系统各个内存池的信息和使用情况,也可以检测内存池空间分配交叉情况,当系统两个内存池空间交叉时,第二个内存池会初始化失败,并给出空间交叉的提示信息。通过make m - [内存备份机制](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244437.md): 业务代码中出现踩内存、释放野指针问题,通过异常dump信息较难定位内存非法操作的位置。备份动态内存节点控制头信息:在前一内存节点控制头中备份当前节点控制头信息。在内存申请和释放操作中增加对当前节点的控制头信息与备份信息的检测,在节点控制头被踩而备份信息未踩时,输出节点控制头备份信息及被踩节点前一内存节点信息,用于进一步分析是否为越界踩内存 - [内存合法性检查](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244438.md): 业务发生踩内存导致内存节点控制头被踩,长时间后才触发业务异常,业务逻辑复杂,难以定位发生踩内存的位置。开启该功能后,在动态内存申请接口中增加内存合法性检查,对动态内存池中所有节点控制头的合法性进行检查,若已发生动态内存节点被踩,及时触发异常,输出error信息,缩小问题定位范围。通过make menuconfig打开内存合法性检查。功能依 - [内存size检查](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244439.md): memset和memcpy操作动态内存,发生越界踩内存问题。对于memset和memcpy操作,当入参为动态内存节点时,增加对内存节点实际大小与入参指定大小的检查,若指定大小大于节点实际大小时,输出error信息,并且取消该次memset或memcpy操作,所以能够防止操作越界。动态内存越界场景下,可开启该功能定位问题。错误码定义见错误码 - [内存泄露检测](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244440.md): 业务运行中发生内存泄露,业务逻辑复杂或者长时间运行才出现。申请内存和释放申请时,在内存节点控制头中记录函数调用栈,发生内存泄露时,通过分析used节点信息,可定位疑似内存泄露的位置。目前只有bestfit内存管理算法支持该功能,需要使能LOSCFG_KERNEL_MEM_BESTFIT。Kernel ---> Memory Managem - [队列调测方法](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244442.md): 队列是一种生产者消费者模型,生产者生产消息放入队列,等待被消费者使用。如果队列已满,生产者被挂起,如果队列已空,消费者被挂起。Huawei LiteOS中使用队列传递消息时,可以设置超时时间,队列的主要作用是实现任务间的异步通信。通过Shell命令queue可以查看队列的使用情况。queue命令依赖LOSCFG_DEBUG_QUEUE,使 - [互斥锁调测方法](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244443.md): 多任务系统使用互斥锁达到资源互斥的目的,其他任务不能强行抢占任务已经占有的资源。使用互斥锁时,可能存在任务间相互等对方释放资源的情况,从而造成死锁。死锁会使任务陷入无限循环等待,导致业务功能障碍。开启dlock互斥锁死锁检测功能后,每个任务在成功获取互斥锁时,会记录该互斥锁为本任务持有,因此通过任务ID可以得知持有的互斥锁。此外,互斥锁控 - [自旋锁调测方法](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244444.md): 多核环境下,多任务系统使用自旋锁达到互斥访问资源的目的。自旋锁的检测模块(lockdep),能够检测以下几种类型的错误(包括使用错误):重复上锁。死锁,以ABBA为例进行说明:任务A持有自旋锁X,并永久等待自旋锁Y。任务B持有自旋锁Y,并永久等待自旋锁X。此时任务A和任务B死锁。任务A持有自旋锁X,并永久等待自旋锁Y。任务B持有自旋锁Y, - [临终遗言使用方法](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244445.md): 临终遗言日志存储钩子函数,实现日志存储的读写函数的注册,接口详细信息可以查看API参考。LOS_ExcInfoRegHook有4个参数:startAddr:临终遗言日志的存储起始地址。space:临终遗言日志的存储空间大小。buf:临终遗言日志在内存中的buffer地址,大小space。LogReadWriteFunc:读写异常信息的钩子 - [魔法键使用方法](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244446.md): 系统未输出挂死相关信息,但是无响应时,可以通过魔法键查看中断是否有响应。在中断有响应的情况下,可以通过魔法键查看task信息中 的CPUP(CPU占用率),找到是哪个任务长时间占用CPU导致系统其他任务无响应(一般为比较高优先级任务一直抢占CPU,导致低优先级任务无响应)。在uart中断和usb转虚拟串口中断中,嵌入魔法键检查功能,对特殊 - [异常信息定位踩内存方法](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0302395661.md): 通过异常信息定位问题,参见问题定位实例。 - [内存备份机制定位踩内存方法](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0305675052.md): 通过内存备份机制定位问题,参见内存备份机制。 - [内存合法性检查定位踩内存方法](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0305675053.md): 通过内存合法性检查定位问题,参见内存合法性检查。 - [内存size检查定位踩内存方法](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0305675054.md): 通过内存size检查定位问题,参见内存size检查。 - [全局变量踩内存定位方法](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244449.md): 调试过程中,发现一个全局变量只在一处赋值为0,但使用时打印发现变成一个非零异常值,大概率是该全局变量被踩。如果已知一个全局变量被踩内存,可在Huawei_LiteOS/out//.map文件中找到该全局变量所在的地址。注意该地址前面最近被使用的变量,排查是否前面变量操作不当引发踩内存,比如对该前面变量进行memcpy, - [task状态判断是否踩内存](https://support.huaweicloud.com/maintenance-LiteOS/zh-cn_topic_0312244450.md): Shell命令task,可以查看当前系统所有任务的状态。命令输出的stackSize、WaterLine、StackPoint、Top0fStack信息,可以作为判断任务栈是否踩内存的指标。这里举例说明如何通过task命令判断是否踩内存,如下图所示,有一任务名为shellTask。StackSize = 0x3000(创建该任务时分配的栈 ## 标准库 - [POSIX支持接口](https://support.huaweicloud.com/lib-LiteOS/zh-cn_topic_0314621601.md): Huawei LiteOS提供一套POSIX适配接口,具体的规格参见下表。 - [POSIX NP支持接口](https://support.huaweicloud.com/lib-LiteOS/zh-cn_topic_0314621602.md): Huawei LiteOS还提供了一套POSIX NP(nonportable)适配接口,以支持部分SMP(多核)的NP接口。NP接口为非POSIX标准接口,作为POSIX接口的补充。以下接口只有在开启多核模式下可以操作亲和性,在单核模式下直接返回ENOERR。 - [POSIX不支持接口](https://support.huaweicloud.com/lib-LiteOS/zh-cn_topic_0314621603.md): Huawei LiteOS的POSIX接口中,有一些未支持,具体参见下表。 - [Libc支持接口](https://support.huaweicloud.com/lib-LiteOS/zh-cn_topic_0314621625.md): Huawei LiteOS支持部分Libc接口,具体如下表所示。 - [Libm支持接口](https://support.huaweicloud.com/lib-LiteOS/zh-cn_topic_0314621626.md): Huawei LiteOS提供一套Libm开源接口,具体的规格参见下表。Libm不支持设置错误返回码。 - [Libc/Libm不支持接口](https://support.huaweicloud.com/lib-LiteOS/zh-cn_topic_0314621627.md): Huawei LiteOS的Libc/Libm接口中,有一些未支持,具体参见下表。自Huawei LiteOS V200R005C00版本起不再支持stdlib.h头文件中提供的atexit()。 - [C++兼容规格](https://support.huaweicloud.com/lib-LiteOS/zh-cn_topic_0314621628.md): 下述表格为C++标准库/STL兼容规格。支持异常和RTTI特性,其他特性由编译器支持;对于STL的特性,支持清单如下,其它特性暂不支持。支持语言支持功能支持工具函数支持字符串处理支持容器类模板支持迭代器支持算法支持数值操作支持线程处理Huawei Liteos提供的memory,uninitialized_fill函数存在内存泄露,慎用。 - [CMSIS v1.0适配接口](https://support.huaweicloud.com/lib-LiteOS/zh-cn_topic_0314621631.md): LiteOS目前已支持大部分CMSIS v1.0接口,接口声明在compat/cmsis/1.0/cmsis_os1.h,接口说明详见下表: - [CMSIS v1.0不支持接口](https://support.huaweicloud.com/lib-LiteOS/zh-cn_topic_0314621632.md): 华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。 - [CMSIS v1.0标准接口适配差异](https://support.huaweicloud.com/lib-LiteOS/zh-cn_topic_0314621633.md): 考虑接口的易用性和Huawei LiteOS内部机制与CMSIS标准接口的差异,在适配CMSIS v1.0接口时,对部分接口进行了修改,详见下表: - [CMSIS v2.0适配接口](https://support.huaweicloud.com/lib-LiteOS/zh-cn_topic_0314621635.md): LiteOS目前已支持大部分CMSIS v2.0接口,接口声明在compat/cmsis/2.0/cmsis_os2.h,接口说明详见下表: - [CMSIS v2.0不支持接口](https://support.huaweicloud.com/lib-LiteOS/zh-cn_topic_0314621636.md): 华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。 - [CMSIS v2.0标准接口适配差异](https://support.huaweicloud.com/lib-LiteOS/zh-cn_topic_0314621637.md): 考虑接口的易用性和Huawei LiteOS内部机制与CMSIS标准接口的差异,在适配CMSIS v2.0接口时,对部分接口进行了修改,详见下表: ## 移植教程 - [什么是移植,为什么要移植](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628477.md): 对于嵌入式设备,由于芯片型号和外设差异较大,且资源有限,所以物联网操作系统无法像 Windows/Linux 那样适配集成所有驱动,因此通常会先适配部分芯片/开发板。为了让操作系统运行在其他芯片/开发板上,此时就需要移植。开发板的移植包括 CPU架构移植、板级/外设驱动移植和操作系统的移植。 - [指南适用范围](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628478.md): 本指南基于STM32芯片平台,以正点原子STM32F407开发板为例介绍如何快速移植LiteOS,其中并不涉及CPU架构移植。 - [移植目录结构](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628479.md): 表格列出了LiteOS源码的目录,其中加粗字体的目录/文件在移植过程中需要修改。target目录下保存了当前已经支持的开发板工程源码。当移植新开发板时,应该在target目录下增加该开发板的目录,目录结构和代码可以参考当前已支持的开发板的目录。例如:STM32F4系列的移植可以参考Cloud_STM32F429IGTx_FIRE工程。ST - [获取LiteOS源代码](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628481.md): LiteOS源码仓在码云上,使用master分支。 - [开发板](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628483.md): 本指南以国内主流STM32学习板-正点原子STM32F407开发板为例进行移植。该开发板的介绍可参考官方网站:探索者STM32F407开发板。 - [烧录仿真器](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628484.md): JLink。 - [简介](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628506.md): 本指南主要基于LiteOS Studio集成开发环境进行移植,烧录工具为JLink,同时使用STM32CubeMX软件生成裸机工程。 - [安装STM32CubeMX](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628507.md): STM32CubeMX下载,本指南使用的是6.0.1版本。 - [安装LiteOS Studio](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628508.md): 除了LiteOS Studio,同时还需要安装git工具、Python、Kconfiglib等三方库、make构建软件、arm-none-eabi编译器软件、C/C++扩展、JLink烧录软件,这些软件的安装均可参考LiteOS Studio安装指南和STM32工程搭建windows开发环境。所有软件安装完毕后,需要重启计算机。对于板载S - [验证LiteOS Studio集成开发环境](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628509.md): 在正式开始移植前,可以先验证当前开发环境是否能成功编译LiteOS代码并完成烧录。目前开源LiteOS支持了若干开发板,如:Cloud_STM32F429IGTx_FIRE、STM32F769IDISCOVERY、STM32L431_BearPi等。可以视情况验证环境:没有官方已适配的开发板,可以先使用LiteOS已支持的开发板工程验证编 - [简介](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628511.md): STM32CubeMX 是意法半导体(ST) 推出的一款图形化开发工具,支持 STM32 全系列产品,能够让用户轻松配置芯片外设引脚和功能,并一键生成C语言的裸机工程。裸机工程可以为移植提供硬件配置文件和外设驱动文件,同时可以测试开发板的基本功能。以下介绍正点原子STM32F407的裸机工程创建过程。 - [新建工程](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628512.md): 选择对应的开发板MCU(对于正点原子STM32F407开发板,选择STM32F407ZG),如下图所示: - [简介](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628514.md): 可以根据需要,自定义配置外设。这里仅配置了最基本的时钟、串口和LED灯、以及烧录调试方式,已经能满足LiteOS运行所需的基本硬件需求。 - [配置时钟](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628515.md): 选择“Pinout & Configuration”标签页,在左边的“System Core”中选择RCC,设置HSE(High Speed Clock,外部高速时钟)为Crystal/ Ceramic Resonator(晶振/陶瓷谐振器),即采用外部晶振作为 HSE 的时钟源,如下图所示:将标签页切换为“Clock Configura - [配置串口和LED灯](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628516.md): 将标签页切换回“Pinout & Configuration”。下图是正点原子STM32F407开发板的配置方法。对于其他开发板,可以参考开发板的原理图进行相应配置。 - [配置烧录调试方式](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628517.md): 仍然在“Pinout & Configuration”标签页中,在左边的“System Core”中选择“SYS”,将“Debug”设置为“Serial Wire”,即SWD接口。该接口适用于STLink和JLink。 - [配置工程](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628518.md): 工程配置中,需要设置工程名、代码保存路径、编译工具链/IDE、代码使用的堆栈大小以及HAL库版本。CubeMX 可以生成 Makefile、MDK-ARM、IAR 等 IDE 工程。本指南基于GCC编译工具链,所以Toolchain/IDE需要选择Makefile。将标签页切换到“Project Manager”,选择左边的“Projec - [生成裸机工程代码](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628519.md): 按以上步骤设置完外设和工程配置后,就可以生成裸机工程代码了,如下图所示:生成的裸机工程目录结构如下表所示: - [编写测试程序](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628521.md): 下面在裸机工程Core\Src\main.c文件中编写测试代码,实现串口循环输出并且LED灯闪烁:添加头文件:#include 在main()函数的while(1)循环中添加如下代码:printf("hello\n"); HAL_Delay(1000); HAL_GPIO_TogglePin(GPIOF, GPIO_PI - [使用LiteOS Studio测试裸机工程](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628522.md): 在“工程配置”界面中点击“目标板”,在“操作”列中点击“+”后,在出现的空行中填入STM32F407开发板信息,选中新增的开发板后,点击确认按钮保存,如下图所示:在裸机工程根目录下的Makefile文件上点击右键->设置为Makefile文件,然后编译工程,编译生成的二进制镜像文件在工程根目录的build目录下,如下图所示:配置烧录器。在 - [移植步骤](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628524.md): 下面的移植工作会基于现有的裸机工程进行,大致步骤如下:增加新移植开发板的目录。适配新开发板的外设驱动和HAL库配置文件。配置系统时钟。适配串口初始化文件。修改链接脚本。适配编译配置。 - [增加新开发板的目录](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628525.md): 正点原子STM32F407开发板使用的是STM32F4芯片,可以参考Cloud_STM32F429IGTx_FIRE工程代码。在LiteOS源码target目录下拷贝Cloud_STM32F429IGTx_FIRE目录,并将目录重命名为新开发板名,比如STM32F407_OpenEdv。下表是STM32F407_OpenEdv目录中的子目 - [适配外设驱动和HAL库配置文件](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628526.md): 将芯片外设驱动文件替换为对应芯片的文件。修改芯片外设驱动源文件system_xxx.c。LiteOS对STM32F407_OpenEdv\Src\system_stm32f4xx.c做了修改,所以该文件无法使用在新开发板上,移植时可以直接替换为裸机工程中对应的文件。对于正点原子STM32F407开发板,在裸机工程中的对应文件为:Core\ - [配置系统时钟](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628527.md): 设置系统主频。可在STM32F407_OpenEdv\include\hisoc\clock.h文件中设置,一般将时间频率设置为SystemCoreClock,实现代码为:#define get_bus_clk() SystemCoreClock可在STM32F407_OpenEdv\include\hisoc\clock.h文件中设置 - [适配串口初始化文件](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628528.md): 使用裸机工程的串口初始化文件Core\Src\usart.c和Core\Inc\usart.h替换LiteOS源码中的targets\STM32F407_OpenEdv\Src\usart.c和targets\STM32F407_OpenEdv\Inc\usart.h。在targets\STM32F407_OpenEdv\Inc\usar - [修改链接脚本](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628529.md): STM32F407_OpenEdv\liteos.ld是新开发板的链接脚本,需要根据开发板实际情况修改stack,flash,ram的值,可以参考裸机工程链接脚本STM32F407ZGTx_FLASH.ld中的设定值进行设置。stack在链接脚本中对应的是“_estack”变量。flash 对应的是“FLASH”变量。ram对应的是“RA - [修改开发板Makefile文件](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628531.md): 华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。 - [添加新开发板到系统配置中](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628532.md): 修改targets\targets.mk。可以参考其他开发板的编译配置,新增正点原子开发板的配置,如下所示:######################### STM32F407ZGTX Options############################### else ifeq ($(LOSCFG_PLATFORM_STM32F40 - [在LiteOS Studio上验证](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628533.md): 通过编译和烧录,验证移植后的LiteOS源码,验证方法可以参考“使用LiteOS Studio测试裸机工程”。对于移植后的LiteOS源码,其Makefile文件在源码根目录下,编译生成的镜像文件Huawei_LiteOS.bin在根目录的out目录下。将Huawei_LiteOS.bin烧录到开发板后,复位开发板,可以在串口看到类似下图 - [任务处理函数简介](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628535.md): LiteOS的main函数定义在开发板工程的main.c文件中,主要负责硬件和内核的初始化工作,并在初始化完成后开始任务调度。在main()调用的OsMain函数中,会调用OsAppInit()创建一个名为“app_Task”的任务,该任务的处理函数为app_init()。用户可以直接在app_init()中添加自己的代码,可以为一段功能 - [创建任务](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628536.md): LiteOS支持多任务。在LiteOS 中,一个任务表示一个线程。任务可以使用或等待CPU、使用内存空间等系统资源,并独立于其它任务运行。LiteOS实现了任务之间的切换和通信,帮助开发者管理业务程序流程。开发者可以将更多的精力投入到业务功能的实现中。在LiteOS中,通过函数LOS_TaskCreate()创建任务,LOS_TaskCr - [如何进行GDB调试](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628538.md): 参考LiteOS Studio官方文档的“STM32工程示例”中的“使用入门”,其中有“调试器”相关介绍。 - [如何联系LiteOS官方开发人员](https://support.huaweicloud.com/porting-LiteOS/zh-cn_topic_0314628539.md): 在gitee网站上的LiteOS项目中提出issue。在Huawei LiteOS官方论坛上提问。 ## 常见问题 - [系统任务栈被撑爆,导致系统挂死问题](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0314872192.md): 原因:1. 如果系统挂死,一般在打印信息中会显示任务水线,如果水线超过了任务栈大小,显示0xffffffff,则说明任务栈太小。2. 如果没有相关任务信息,则可以查看backtrace中的fp寄存器值,如果fp接近该任务的栈顶,则也可以确认任务栈太小。解决方案:1. 创建任务时设置的任务栈太小,最直接的方法就是调大任务栈。2. 任务中有较 - [软件定时器使用不规范,导致定时器无响应](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0314872193.md): 原因:使用LOS_SwtmrCreate创建定时器时,设置了入参定时器ID的初始值,而不管设置的ID号是否已经存在定时器,系统都会为新创建的定时器重新赋予一个合适ID。后续如果通过设置的ID号使用该定时器,可能会出现两种情况:该ID并没有对应的定时器,故无法通过该ID号使用定时器。该ID存在相应的定时器,故通过该ID号使用的定时器并不是实 - [如何查看当前系统中已创建中断和触发的次数?](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0314861846.md): 答:hwi 命令可以查看当前系统中已创建中断和触发的次数,通过该命令,可以查看创建的中断是否有成功触发。 - [系统运行时循环打印Warning: DO NOT call xxx in software timer callback及调用栈异常信息](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0314861847.md): 原因:LiteOS 系统中为保证软件定时器任务的定时准确,不允许在软件定时器回调中调用可能造成任务阻塞的接口(例如 LOS_SemPend / LOS_MuxPend ),因此当检测到软件定时器回调中调用此类接口时,系统输出 warning 提示信息及调用栈信息。解决方案:建议用户通过调用栈信息找到调用处,对代码进行修改。 - [系统不支持system函数,怎么处理?](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0314861848.md): 答:LiteOS 系统不支持 system 函数执行相关操作,在使用 system 函数进行功能调用的地方,可以直接调用该功能接口函数实现功能调用。 - [用户自己注册shell命令导致shell任务栈溢出](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0314861849.md): 原因:用户在使用或者测试时,有时会通过增加一个 shell 命令去执行,由于系统配置的 shell 任务栈不是很大,因此如果用户将所有操作都放在 shell 命令中直接执行,很容易造成 shell 任务栈溢出。解决方案:此种情况下用户可在 shell 命令入口函数中创建任务来执行自己的实际操作。 - [C++源码包含math.h导致数学函数重定义](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0314876650.md): 原因:C++库中实现了部分数学函数库,并在头文件中进行了using 引用,导致与Huawei LiteOS系统C库中的定义冲突了。解决方案:C++源码math.h的包含修改为cmath,即“#include ”修改为 “#include ”。 - [C++源码编译找不到bits/c++config.h](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0314876651.md): 原因:同步修改 los_config.mk 时,添加的 C++ 头文件路径缺失。解决方案:继承LiteOS代码到自己工程时,确保编译环境和LiteOS编译环境一致,包含了C++的路径。用户可以在自己编译框架中包含C++编译器路径,具体请参考 LITEOS_COMPILER_CXX_PATH、LITEOS_CXXINCLUDE在compil - [C++源码编译找不到stdlib.h](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0314876652.md): 原因:系统中 C++ 头文件包含路径不当,导致cstdlib中执行“#include_next ”时,找不到系统 libc 中的 stdlib.h 。解决方案:修改los_config.mk 中LITEOS_CXXINCLUDE和LITEOS_LIBC_INCLUDE 顺序:LITEOS_LIBC_INCLUDE应在L - [使用C++库运行死机](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0314876653.md): 原因:未调用C++初始化的情况下调用C++代码,会出现访问0地址异常,可根据异常信息排查是否为未初始化导致的问题。解决方案:调用 LOS_CppSystemInit 函数初始化,具体用法请参见 Huawei LiteOS 开发指南。 - [C调用C++函数,函数符号找不到](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0314876654.md): 原因:被调用的函数未遵循C的调用约定,导致函数符号编译时按C++的命名修饰规则编译,而在调用处按C的命令修饰规则编译,调用时就会找不到定义。解决方案:请在函数定义和声明前添加如下C的调用约定:C++调用C函数,也存在类似问题,请在声明前添加C的调用约定。 - [C++源码包含math.h导致数学函数重定义](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0314876650.md): 原因:C++库中实现了部分数学函数库,并在头文件中进行了using 引用,导致与Huawei LiteOS系统C库中的定义冲突了。解决方案:C++源码math.h的包含修改为cmath,即“#include ”修改为 “#include ”。 - [C++源码编译找不到bits/c++config.h](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0314876651.md): 原因:同步修改 los_config.mk 时,添加的 C++ 头文件路径缺失。解决方案:继承LiteOS代码到自己工程时,确保编译环境和LiteOS编译环境一致,包含了C++的路径。用户可以在自己编译框架中包含C++编译器路径,具体请参考 LITEOS_COMPILER_CXX_PATH、LITEOS_CXXINCLUDE在compil - [C++源码编译找不到stdlib.h](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0314876652.md): 原因:系统中 C++ 头文件包含路径不当,导致cstdlib中执行“#include_next ”时,找不到系统 libc 中的 stdlib.h 。解决方案:修改los_config.mk 中LITEOS_CXXINCLUDE和LITEOS_LIBC_INCLUDE 顺序:LITEOS_LIBC_INCLUDE应在L - [使用C++库运行死机](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0314876653.md): 原因:未调用C++初始化的情况下调用C++代码,会出现访问0地址异常,可根据异常信息排查是否为未初始化导致的问题。解决方案:调用 LOS_CppSystemInit 函数初始化,具体用法请参见 Huawei LiteOS 开发指南。 - [C调用C++函数,函数符号找不到](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0314876654.md): 原因:被调用的函数未遵循C的调用约定,导致函数符号编译时按C++的命名修饰规则编译,而在调用处按C的命令修饰规则编译,调用时就会找不到定义。解决方案:请在函数定义和声明前添加如下C的调用约定:C++调用C函数,也存在类似问题,请在声明前添加C的调用约定。 - [常用链接](https://support.huaweicloud.com/faq-LiteOS/zh-cn_topic_0145350118.md): Huawei LiteOS 官网:liteos.orgHuawei LiteOS 论坛:https://bbs.huaweicloud.com/forum/forum-729-1.htmlHuawei LiteOS 开源代码:(码云)https://gitee.com/LiteOS/LiteOS;(github)https://githu ## 参与贡献 - [协议](https://support.huaweicloud.com/contribute-LiteOS/zh-cn_topic_0145347224.md): 您可以自由地:分享— 在任何媒介以任何形式复制、发行本文档。演绎— 修改、转换或以本文档为基础进行创作。只要你遵守许可协议条款,许可人就无法收回你的这些权利。惟须遵守下列条件:署名— 您必须提供适当的证书,提供一个链接到许可证,并指示是否作出更改。您可以以任何合理的方式这样做,但不是以任何方式表明,许可方赞同您或您的使用。非商业性使用— - [编程规范](https://support.huaweicloud.com/contribute-LiteOS/zh-cn_topic_0145350121.md): 此编程规范在业界通用的编程规范基础上进行了整理,供开发者参考使用。清晰,易于维护、易于重构。简洁,易于理解,并且易于实现。风格统一,代码整体风格保持统一。通用性,遵循业界通用的编程规范。建议将工程按照功能模块划分子目录(可参考LiteOS的功能模块划分),子目录再定义头文件和源文件目录。使用驼峰风格进行命名,此风格大小写字母混用,不同单词 - [文档写作规范](https://support.huaweicloud.com/contribute-LiteOS/zh-cn_topic_0145350122.md): Huawei LiteOS(以下简称LiteOS)欢迎开发者参与到开源社区的贡献中来,本文主要介绍参与LiteOS文档贡献的写作规范,如果贡献者提交文档的修改或提交新的文档,请参照此规范。如需提交新的文档,在LiteOS代码仓doc目录下创建新的.md文件,命名需遵循xxx_xxx.md格式,根据文档的内容来声明。比如介绍写作规范的文档, - [Commit message规范](https://support.huaweicloud.com/contribute-LiteOS/zh-cn_topic_0313807413.md): 目前,社区有多种 Commit message 的写法规范。LiteOS采用的是Angular规范,这是目前使用最广的写法,比较合理和系统化,并且有配套的工具。格式化的Commit message有几个好处:提供更多的历史信息,方便快速浏览。可以过滤某些commit(比如文档改动),便于快速查找信息。可以直接从commit生成Change - [贡献流程说明](https://support.huaweicloud.com/contribute-LiteOS/zh-cn_topic_0303218268.md): LiteOS的代码仓托管在gitee上,因此代码贡献者需要在gitee上注册账号才能贡献代码。注册账号可以参考注册Gitee账号。代码贡献可以分为在线修改和本地提交两种。在线修改适用于修改量较少的情况,方便快捷,点击页面“编辑”按钮,跳转到对应的编辑页面。编辑修改后,点击页面下方“提交”按钮,即提交修改到 LiteOS 工程,静候工作人员 - [加入我们](https://support.huaweicloud.com/contribute-LiteOS/zh-cn_topic_0145347230.md): 如您有合作意向,希望加入 Huawei LiteOS 生态合作伙伴,请发邮件至 liteossupport@huawei.com,说明您的产品方向和合作诉求。如您有兴趣参与开源贡献,可至 Gitee 或者Github下载开源代码。任何问题随时欢迎到LiteOS论坛交流或访问LiteOS官网:liteos.org,进一步了解详细信息。 ## API参考 - [产品术语](https://support.huaweicloud.com/pcre_gls/index.md): 华为云术语,为用户提供华为云基本概念说明,帮助您快速上手使用华为云服务。 - [责任共担](https://support.huaweicloud.com/resp-pcre/index.md): 华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上”。针对层出不穷的云安全挑战和无孔不入的云安全威胁与攻击,华为云在遵从法律法规业界标准的基础上,以安全生态圈为护城河,依托华为独有的软硬件优势,构建面向不同区域和行业的完善云服务安全保障体系。与传统的本地数据中心相比,云计算的运营方和使用方分离,提供了更好的灵活性和控制力 - [云服务等级协议(SLA)](https://www.huaweicloud.com/declaration/sla.md): 本服务等级协议(以下简称“SLA”)是您与华为云签订的《华为云用户协议》的不可分割的组成部分,旨在明确华为云服务等级及相应补偿。 - [白皮书资源](https://www.huaweicloud.com/securecenter/resource.md): 白皮书资源 - [系统权限](https://support.huaweicloud.com/permissions/iam_01_0001.md): 默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。请参考常见系统权限设置案例为IAM用户授权。作用范围:权限的作用范围,给用户组授予权限时,选择的授权区域。全局服务:服务部署时不区分物理区