# LiteOSDiary **Repository Path**: frame0224/LiteOSDiary ## Basic Information - **Project Name**: LiteOSDiary - **Description**: LiteOS学习笔记 - **Primary Language**: HTML - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2019-06-14 - **Last Updated**: 2022-06-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LiteOSDiary #### 介绍 LiteOS学习笔记 ------ > 参考: > > 1. 【野火】物联网操作系统 LiteOS 开发实战指南 > 2. [Huawei LiteOS | 中文网](https://liteos.github.io/kernel/semaphore.html#%E6%A6%82%E8%BF%B0) ## 1 内核指南 ### 1.1 LiteOS架构 Huawei LiteOS 是轻量级的实时操作系统,是华为IoT OS 如下图所示为LiteOS系统架构框图 ![LiteOS系统架构图](Image\LiteOS架构.png) - Huawei LiteOS 基础内核是最精简的 Huawei LiteOS 操作系统代码,包括**任务管理、内存管理、时间管理、通信机制、[中断管理](https://blog.csdn.net/xinghunlove123/article/details/91829138)、队列管理、事件管理、定时器**等操作系统基础组件,可以单独运行 ### 1.2 特点 - 高实时性,高稳定性 - 超小内核,基础内核体积可以裁剪至不到10k - 低功耗 - 支持功能静态裁剪 ### 1.3 模块简介 #### 1.3.1 [任务](https://blog.csdn.net/xinghunlove123/article/details/90523492) - 提供任务的**创建**、**删除**、**延迟**、**挂起**、**恢复**等功能,以及**锁定**和**解锁**任务调度。支持任务按优先级高低的抢占调度及同优先级时间片轮转调度 #### 1.3.2 任务同步 - [**信号量**](https://blog.csdn.net/xinghunlove123/article/details/90636460):支持信号量的**创建**、**删除**、**申请**、**释放**等功能 - [**互斥锁**](https://blog.csdn.net/xinghunlove123/article/details/90699518):支持互斥锁的**创建**、**删除**、**申请**、**释放**等功能 #### 1.3.3 IPC通信 - [**事件**](https://blog.csdn.net/xinghunlove123/article/details/90733467):支持**读事件**和**写事件**功能 - [**消息队列**](https://blog.csdn.net/xinghunlove123/article/details/90523579):支持消息队列的**创建**、**删除**、**发送**、和**接收**功能 #### 1.3.4 时间管理 - **系统时间**:系统时间是由定时/计数器产生的输出脉冲触发中断而产生的 - **Tick时间**:Tick是操作系统调度的基本时间单位,对应的时长由系统主频及每秒Tick数决定,由用户配置 - [**软件定时器**](https://blog.csdn.net/xinghunlove123/article/details/90753990):以Tick为单位的定时器功能,软件定时器的超时处理函数在系统创建的Tick软中断中被调用 #### 1.3.5 [内存管理](https://blog.csdn.net/xinghunlove123/article/details/91416693) - 提供**静态内存**和**动态内存**两种算法,支持内存**申请**、**释放**。目前支持的内存管理算法有固定大小的BOX算法、动态申请`SLAB`、`DLINK`算法。 - 提供`内存统计`、`内存越界检测`功能 ### 1.4 支持芯片 | 支持的核 | 芯片 | | :-------- | :----------------------------------------------------------- | | Cortex-M0 | STM32L053R8Tx、ATSAMD21G18A、ATSAMD21J18A、ATSAMR21G18A、EFM32HG322F64、MKL26Z128、MKW41Z512、LPC824M201JHI33、MM32L073PF、nRF51822、NANO130KE3BN | | Cortex-M3 | STM32F103RB、ATSAM4SD32C、EFM32GG990F1024、GD32F103VCT6、GD32150R8、GD32F190R8、GD32F207VC、MM32F103CBT6、MM32L373PS | | Cortex-M4 | STM32F411RE、STM32F412ZG、STM32F429ZI、STM32F429IG、STM32L476RG、EFM32PG1B200F256GM48 、GD32F450IK、CC3220SF、LPC54114j256BD64、nRF52840、nRF52832、NUC472HI8AE、ATSAMG55J19、ADuCM4050LF | | Cortex-M7 | STM32F746ZG、ATSAME70Q21 | ### 1.5 使用约束 - Huawei LiteOS 提供一套 Huawei LiteOS 接口,同时支持 CMSIS 接口,它们功能一致,但混用 CMSIS 和 Huawei LiteOS接口可能会导致不可预知的错误,例如用 CMSIS 接口申请信号量,但用 Huawei LiteOS 接口释放信号量。 - 开发驱动程序只能用 Huawei LiteOS 的接口,上层 APP 建议用 CMSIS 接口 ------ ### 1.6 LiteOS常见句柄介绍 #### 1.6.1 任务句柄 - 任务句柄(*任务ID*)是一个**指针**(`UINT32`),但是定义的时候是按照普通变量定义(起指针作用),而非指针变量 - 任务句柄用于指向一个任务,当任务创建好之后,它就具有了一个任务句柄 - 我们在操作某个任务时,都需要这个任务句柄 - 如果是自身的任务操作自己,那么这个句柄可以为NULL #### 1.6.2 内核对象句柄 - **内核对象**: - **信号量** - **消息队列** - **事件标志组** - **软件定时器**等 - 要使用这些内核对象,必须先创建(调用对应函数),创建成功后会返回一个相应的**句柄** - **内核对象句柄**实际上就是一个**指针**,后续我们就可以通过这个句柄操作这些内核对象 - 内核对象说白了就是一种**全局的数据结构**,通过这些数据结构我们可以实现**任务间的通信**,**任务间的事件同步**等各种功能,这些功能的实现,我们是通过调用这些内核对象的函数来完成的