OpenHarmony(鸿蒙南向开发)——轻量系统内核(LiteOS-M)【时间管理】

基本概念

时间管理以系统时钟为基础,给应用程序提供所有和时间有关的服务。

系统时钟是由定时器/计数器产生的输出脉冲触发中断产生的,一般定义为整数或长整数。输出脉冲的周期叫做一个“时钟滴答”。系统时钟也称为时标或者Tick。

用户以秒、毫秒为单位计时,而操作系统以Tick为单位计时,当用户需要对系统进行操作时,例如任务挂起、延时等,此时需要时间管理模块对Tick和秒/毫秒进行转换。

OpenHarmony LiteOS-M内核时间管理模块提供时间转换、统计功能。

时间单位

  • Cycle 系统最小的计时单位。Cycle的时长由系统主时钟频率决定,系统主时钟频率就是每秒钟的Cycle数。

  • Tick Tick是操作系统的基本时间单位,由用户配置的每秒Tick数决定。

接口说明

OpenHarmony LiteOS-M内核的时间管理提供下面几种功能,接口详细信息可以查看API参考。

表1 时间转换

接口名 描述
LOS_MS2Tick 毫秒转换成Tick。
LOS_Tick2MS Tick转化为毫秒。
OsCpuTick2MS Cycle数目转化为毫秒,使用2个UINT32类型的数值分别表示结果数值的高、低32位。
OsCpuTick2US Cycle数目转化为微秒,使用2个UINT32类型的数值分别表示结果数值的高、低32位。

表2 时间统计

接口名 描述
LOS_SysClockGet 获取系统时钟。
LOS_TickCountGet 获取自系统启动以来的Tick数。
LOS_CyclePerTickGet 获取每个Tick多少Cycle数。
LOS_CurrNanosec 获取当前的时间,单位纳秒。

表3 时间注册

接口名 描述
LOS_TickTimerRegister 重新注册系统时钟的定时器和对应的中断处理函数。

表4 延时

接口名 描述
LOS_MDelay 延时函数,延时单位毫秒。
LOS_UDelay 延时函数,延时单位微秒。

开发流程

时间管理的典型开发流程:

  1. 根据实际需求,完成板级配置适配,并配置系统主时钟频率OS_SYS_CLOCK(单位Hz)和LOSCFG_BASE_CORE_TICK_PER_SECOND。OS_SYS_CLOCK的默认值基于硬件平台配置。

  2. 调用时钟转换/统计接口。

说明:

  • 时间管理不是单独的功能模块,依赖于OS_SYS_CLOCK和LOSCFG_BASE_CORE_TICK_PER_SECOND两个配置选项。

  • 系统的Tick数在关中断的情况下不进行计数,故系统Tick数不能作为准确时间使用。

  • 上文描述的配置选项维护在开发板工程 target_config.h 中,部分配置项未定义的缺省值定义在内核 los_config.h中。

编程实例

实例描述

在下面的例子中,介绍了时间管理的基本方法,包括:

  1. 时间转换:将毫秒数转换为Tick数,或将Tick数转换为毫秒数。

  2. 时间统计:每Tick的Cycle数、自系统启动以来的Tick数和延迟后的Tick数。

示例代码

前提条件:

  • 使用每秒的Tick数LOSCFG_BASE_CORE_TICK_PER_SECOND的默认值100。

  • 配好OS_SYS_CLOCK系统主时钟频率。

时间转换:

本演示代码在 ./kernel/liteos_m/testsuites/src/osTest.c 中编译验证,在TestTaskEntry中调用验证入口函数ExampleTransformTime和ExampleGetTime。

VOID ExampleTransformTime(VOID)
{
    UINT32 ms;
    UINT32 tick;

    /* 10000ms转换为tick */
    tick = LOS_MS2Tick(10000);
    printf("tick = %d \n", tick);

    /* 100tick转换为ms */
    ms = LOS_Tick2MS(100);
    printf("ms = %d \n", ms);
}

时间统计和时间延迟:

VOID ExampleGetTime(VOID)
{
    UINT32 cyclePerTick;
    UINT64 tickCountBefore;
    UINT64 tickCountAfter;

    cyclePerTick  = LOS_CyclePerTickGet();
 
<think>首先,用户的问题是:“我想了解OpenHarmony的定制开发方法和相关工作 请问OpenHarmony 定制开发指南 开发流程 适配方法”。这涉及到OpenHarmony的定制开发,包括开发指南、流程和适配方法。 根据系统级指令,我需要: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 参考站内引用: - [^1]: 鸿蒙HarmonyOS)应用层开发(北向)知识点汇总等。 - [^2]: OpenHarmony鸿蒙南向开发)——标准系统移植指南(一)。 - [^3]: OpenHarmony 开发环境搭建文档。 - [^4]: 关于kernel.mk在编译流程中的信息。 用户的问题是关于OpenHarmony的定制开发,所以我需要基于这些引用构建回答。引用中提到南向开发、移植指南等,这与定制开发相关。 关键点: - 定制开发通常涉及系统移植、适配硬件、修改内核等。 - 引用[2]提到标准系统移植指南。 - 引用[4]讨论了编译流程中的内核处理。 - 引用[3]有开发环境搭建的信息。 结构回答: 1. **介绍OpenHarmony定制开发**:简要解释什么是定制开发。 2. **开发流程**:描述定制开发的一般步骤。 3. **适配方法**:详细说明如何适配硬件或定制功能。 4. **参考资源**:提供相关指南和文档链接。 5. **生成相关问题**:在末尾添加相关问题。 确保回答真实可靠:基于提供的引用,避免猜测。引用中提到“移植指南”,所以我可以强调移植作为定制的一部分。 使用中文回答。 生成相关问题:在回答末尾添加几个相关问题。 现在,构建回答: - **开头**:直接回应问题。 - **开发流程**: - 环境搭建(引用[3])。 - 代码获取和编译(引用[4])。 - 移植和适配(引用[2])。 - **适配方法**: - 硬件适配(如芯片移植)。 - 软件定制(如修改内核)。 - **引用标识**:在相关部分末尾添加引用,如[^2]。 最后,添加相关问题。 完整回答框架: 1. 介绍OpenHarmony定制开发。 2. 开发流程:包括环境搭建、代码获取、编译、移植、测试等。 3. 适配方法:如针对不同硬件的移植方法。 4. 提供资源链接。 5. 相关问题。</think>### OpenHarmony 定制开发指南 OpenHarmony 是一个开源的分布式操作系统,支持多种设备类型。定制开发通常涉及修改系统内核、适配特定硬件或添加新功能,以满足特定需求。以下是基于官方文档和实践经验的开发流程和适配方法,内容参考了相关指南和知识点[^1][^2][^4]。 #### 1. **定制开发流程** OpenHarmony 的定制开发遵循一个结构化流程,确保系统稳定性和兼容性: - **步骤 1: 环境搭建** 首先,搭建开发环境。包括安装必要的工具链(如 GCC、Python)和配置开发平台(Windows 或 Ubuntu)。例如,Ubuntu 环境需安装依赖库: ```bash sudo apt-get update && sudo apt-get install git-lfs binutils-dev flex bison ``` 参考文档提供了详细的环境搭建指南[^3]。 - **步骤 2: 代码获取与初始化** 从 OpenHarmony 官方仓库克隆源码: ```bash git clone https://gitee.com/openharmony/manifest.git repo init -u https://gitee.com/openharmony/manifest.git -b master repo sync ``` 这一步确保代码基础一致,便于后续定制[^4]。 - **步骤 3: 编译与构建** 使用 OpenHarmony 的编译系统(如 build.sh)构建基础系统。编译前需配置目标设备(如轻量系统或标准系统): ```bash ./build.sh --product-name {product_name} # 例如,Hi3516DV300 开发板 ``` 编译过程中,系统会自动处理内核补丁和依赖,确保代码环境纯净[^4]。 - **步骤 4: 定制与移植** 根据需求修改代码: - **内核定制**:编辑 `kernel/linux-4.19` 目录下的文件,如添加驱动或调整配置。 - **系统服务定制**:修改 `foundation` 或 `applications` 模块,添加新功能。 移植指南强调了保持内核原代码环境的重要性,以避免编译错误[^4]。 - **步骤 5: 测试与部署** 在目标硬件上刷写系统镜像,并使用测试框架(如 XTS)验证兼容性。问题排查可通过日志分析工具完成。 整个流程强调迭代开发:从环境准备到测试部署,每个阶段需文档化和版本控制。 #### 2. **适配方法** 适配是定制开发的核心,针对不同硬件或场景: - **硬件适配** 针对新芯片或开发板,需实现 HAL(硬件抽象层)接口: - 驱动开发:在 `drivers/peripheral` 目录添加或修改驱动代码,例如为传感器编写 HDF(硬件驱动框架)模块。 - 设备树配置:更新 `vendor/{company}/{device}` 中的设备树文件(.dts),定义硬件资源。 标准系统移植指南提供了详细示例,如 GPIO 或 I2C 适配[^2]。 - **软件功能定制** - **裁剪系统组件**:通过 `build/lite/product` 中的配置文件,移除不需要的模块(如 GUI 服务),减小镜像大小。 - **添加新特性**:例如,集成 AI 框架时,修改 `foundation/ai` 模块并确保 API 兼容。 适配方法需遵循 OpenHarmony 的模块化设计原则,避免破坏系统完整性[^1]。 - **跨平台移植** 对于轻量系统(如 IoT 设备),重点优化内存占用: - 使用 `kernel/liteos_m` 替代 Linux 内核,减少资源消耗。 - 适配指南建议优先处理中断处理和电源管理[^1]。 #### 3. **参考资源与最佳实践** - **官方文档**: - [OpenHarmony 移植指南](https://gitee.com/openharmony/docs)(包括南向开发全流程)[^2]。 - [开发环境搭建教程](https://qr18.cn/CgxrRy)(涵盖 Windows/Ubuntu 配置)[^3]。 - **最佳实践**: - 在定制前备份代码,使用 Git 分支管理变更。 - 优先参考社区案例(如 Hi3516DV300 移植),减少适配风险。 - 性能优化时,注意编译选项如 `-Os`(优化大小)[^4]。 定制开发需要扎实的系统知识,建议从官方移植指南入手,逐步深入[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值