当前位置:首页 >探索 >OpenHarmony内核编程接口—介绍线程管理与通用等待功能案例 一旦RUNNING线程终止或被BLOCKED

OpenHarmony内核编程接口—介绍线程管理与通用等待功能案例 一旦RUNNING线程终止或被BLOCKED

2024-06-30 01:25:16 [百科] 来源:避面尹邢网

OpenHarmony内核编程接口—介绍线程管理与通用等待功能案例

系统 OpenHarmony Thread指在一个进程(process)空间内,内能案可以被操作系统单独调度的核编运行单位,与同一进程的程接程管其他线程共享进程的地址空间和运行上下文。

想了解更多关于开源的口介内容,请访问:

OpenHarmony内核编程接口—介绍线程管理与通用等待功能案例 一旦RUNNING线程终止或被BLOCKED

51CTO 开源基础软件社区

OpenHarmony内核编程接口—介绍线程管理与通用等待功能案例 一旦RUNNING线程终止或被BLOCKED

https://ost.51cto.com

OpenHarmony内核编程接口—介绍线程管理与通用等待功能案例 一旦RUNNING线程终止或被BLOCKED

前言

本文介绍了内核编程接口之线程和等待

线程管理

线程的绍线概念和状态

thread指在一个进程(process)空间内,可以被操作系统单独调度的理通例运行单位,与同一进程的待功其他线程共享进程的地址空间和运行上下文。

ps: 在引入线程的内能案操作系统中,通常都是核编把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的程接程管基本单位。

线程状态大致分为五个状态:RUNNING,口介READY,绍线BLOCKED,理通例TERMINATED,待功INACTIVE。内能案

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

RUNNING:当前正在运行的线程处于RUNNING状态需要注意的是一次只能有一个线程处于此状态。

READY:准备运行的线程处于READY状态,一旦RUNNING线程终止或被BLOCKED,具有最高优先级的下一个READY线程将成为RUNNING线程。

BLOCKED:被延迟,等待事件发生或挂起的线程处于BLOCKED状态。

TERMINATED:调用osThreadTerminate接口时,线程在资源尚未释放的情况下被TERMINATED。

INACTIVE:未创建或已终止并释放所有资源的线程处于INACTIVE状态。

内核编程的intelliSense设置

ps:因为作者已经设置过includePath了,所以kernel\liteos_m\kal\cmsis\cmsis_os2.h下的头文件没有爆红。

直接修改 .vscode\c_cpp_properties.json文件。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

输入includePath即可,注意逗号。

"${ workspaceFolder}/kernel/liteos_m/kal"
"${ workspaceFolder}/kernel/liteos_m/kal/cmsis"
"${ workspaceFolder}/device/hisilicon/hispark_pegasus/sdk_liteos/platform/os/Huawei_LiteOS/components/lib/libc/musl/arch/riscv32"

案例演示

准备好开发套件。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

ps:目前osThreadDetach,osThreadJoin,osThreadEnumerate接口暂未实现,案例没有演示。

在源码中查看接口详细信息,根据路径kernel\liteos_m\kal\cmsis\cmsis_os2.h 找到cmsis_os2.h文件。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

举osThreadNew接口的例子,ctrl+f 输入对你想要查看的接口名称进行搜索,可快速定位。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

根据路径,新建文件:

  • applications\sample\wifi-iot\app\thread_demo\thread.c
  • applications\sample\wifi-iot\app\thread_demo\BUILD.gn

首先是头文件。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

创建线程,返回线程id,封装成一个函数,便于调用。

osThreadId_t newThread(char *name, osThreadFunc_t func, void *arg)

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

创建一个线程测试函数。

线程名称,状态。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

创建主线程函数。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

线程的优先级。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

挂起,恢复线程。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

线程栈空间大小,未使用栈空间大小。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

活跃线程数,最后终止线程。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

定义此demo的入口函数,最后别忘了使用宏 APP_FEATURE_INIT 让入口函数执行。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

修改脚本文件,注意文件路径。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

编译成功。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

烧录成功。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

运行成功。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

通用等待功能

时间管理

时间管理指内核的时间管理模块以系统时钟为基础,给应用程序提供所有和时间有关的服务。
系统时钟:Tick或时标,由定时器或计数器产生的输出脉冲触发中断产生的信号;OS会对Tick 计数,一般定义为整数或长整数;系统时钟的绝对精度可达百万分之50。

时钟周期

时钟周期指由定时器或计数器产生的输出脉冲的周期,即两个Tick间隔的时间长度。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

API接口介绍

osDelay,osDelayUntil,用到两个内核信息与控制的API(osKernelGetTickCount,osKernelGetTickFreq),主要介绍 osDelay 接口。

osDelay 顾名思义就是等待指定的Ticks,线程执行完 osDelay 后,会从RUNNING状态被LiteOS转换为BLOCKED状态,在指定的Ticks到达后,线程会被LiteOS转换为READY状态。此时如果线程拥有最高优先权,它将被LiteOS立即调度也就是立即进入RUNNING状态。

osDelay(1) 等待下一个tick出现,一定是等待一个cycle吗,所以需要分情况讨论。

ps:1cycle=10ms

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

案例演示

根据路径,自行建立源码文件和脚本文件:

  • applications\sample\wifi-iot\app\delay_demo\delay.c
  • applications\sample\wifi-iot\app\delay_demo\BUILD.gn

添加头文件。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

创建主线程函数。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

创建入口函数。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

最后别忘了定义宏 APP_FEATURE_INIT运行入口函数。

APP_FEATURE_INIT(DelayTestTask);

修改编译脚本文件,注意编译脚本路径。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

编译成功。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

烧录成功。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

运行成功。

【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区【OpenHarmony内核编程接口】介绍线程管理与通用等待功能案例-开源基础软件社区

想了解更多关于开源的内容,请访问:

51CTO 开源基础软件社区

https://ost.51cto.com

责任编辑:jianghua 来源: 51CTO 开源基础软件社区 内核编程接口线程管理

(责任编辑:热点)

    推荐文章
    热点阅读