当前位置: 首页 > news >正文

HCIA-HarmonyOS设备开发认证V2.0-3.2.轻量系统内核基础-软件定时器

在这里插入图片描述

目录

  • 一、软件定时器基本概念
  • 二、软件定时器运行机制
  • 三、软件定时器状态
  • 四、软件定时器模式
  • 五、软件定时器开发流程
  • 六、软件定时器使用说明
  • 七、软件定时器接口
  • 八、代码分析(待续...)
  • 坚持就有收获

一、软件定时器基本概念

  • 软件定时器,是基于系统 Tick 时钟中断且由软件来模拟的定时器,当经过设定的 Tick 时钟计数值后会触发用户定义的回调函数。定时精度与系统 Tick 时钟的周期有关。
  • 硬件定时器受硬件的限制,数量上不足以满足用户的实际需求,因此为了满足用户需求,提供更多的定时器,OpenHarmony LiteOS-M 内核提供软件定时器功能。软件定时器扩展了定时器的数量,允许创建更多的定时业务。

软件定时器功能上支持:

  • 静态裁剪:能通过宏关闭软件定时器功能。
  • 软件定时器创建。
  • 软件定时器启动。
  • 软件定时器停止。
  • 软件定时器删除。
  • 软件定时器剩余 Tick 数获取。

二、软件定时器运行机制

软件定时器是系统资源,在模块初始化的时候已经分配了一块连续的内存,系统支持的最大定时器个数由 los_config.h 中的 LOSCFG_BASE_CORE_SWTMR_LIMIT 宏配置。

软件定时器使用了系统的一个队列和一个任务资源,软件定时器的触发遵循队列规则,先进先出。定时时间短的定时器总是比定时时间长的靠近队列头,满足优先被触发的准则。

软件定时器以 Tick 为基本计时单位,当用户创建并启动一个软件定时器时,LiteOS-M 内核会根据当前系统 Tick 时间及用户设置的定时间隔确定该定时器的到期 Tick 时间,并将该定时器控制结构挂入计时全局链表。

当 Tick 中断到来时,在 Tick 中断处理函数中扫描软件定时器的计时全局链表,看是否有定时器超时,若有则将超时的定时器记录下来。

Tick 中断处理函数结束后,软件定时器任务(优先级为最高)被唤醒,在该任务中调用之前记录下来的定时器的超时回调函数。

三、软件定时器状态

  • OS_SWTMR_STATUS_UNUSED(未使用)系统在定时器模块初始化的时候将系统中所有定时器资源初始化成该状态。
  • OS_SWTMR_STATUS_CREATED(创建未启动/停止)在未使用状态下调用LOS_SwtmrCreate 接口或者启动后调用 LOS_SwtmrStop 接口后,定时器将变成该状态。
  • OS_SWTMR_STATUS_TICKING(计数)在定时器创建后调用 LOS_SwtmrStart 接口,定时器将变成该状态,表示定时器运行时的状态。

四、软件定时器模式

  • 第一类是单次触发定时器,这类定时器在启动后只会触发一次定时器事件,然后定时器自动删除。
  • 第二类是周期触发定时器,这类定时器会周期性的触发定时器事件,直到用户手动地停止定时器,否则将永远持续执行下去。
  • 第三类也是单次触发定时器,但与第一类不同之处在于这类定时器超时后不会自动删除,需要调用定时器删除接口删除定时器。

五、软件定时器开发流程

配置软件定时器。

  • 确认配置项 LOSCFG_BASE_CORE_SWTMR 和 LOSCFG_BASE_IPC_QUEUE 为 1 打开状态;
  • 配置 LOSCFG_BASE_CORE_SWTMR_LIMIT 最大支持的软件定时器数;
  • 配置 OS_SWTMR_HANDLE_QUEUE_SIZE 软件定时器队列最大长度;

创建定时器 LOS_SwtmrCreate。

  • 创建一个指定计时时长、指定超时处理函数、指定触发模式的软件定时器;
  • 返回函数运行结果,成功或失败;

启动定时器 LOS_SwtmrStart。

获得软件定时器剩余 Tick 数 LOS_SwtmrTimeGet。

停止定时器 LOS_SwtmrStop。

删除定时器 LOS_SwtmrDelete。

六、软件定时器使用说明

  • 软件定时器的回调函数中不要做过多操作,不要使用可能引起任务挂起或者阻塞的接口或操作。
  • 软件定时器使用了系统的一个队列和一个任务资源,软件定时器任务的优先级设定为 0,且不允许修改。
  • 系统可配置的软件定时器资源个数是指:整个系统可使用的软件定时器资源总个数,而并非是用户可使用的软件定时器资源个数。例如:系统软件定时器多占用一个软件定时器资源数,那么用户能使用的软件定时器资源就会减少一个。
  • 创建单次软件定时器,该定时器超时执行完回调函数后,系统会自动删除该软件定时器,并回收资源。
  • 创建单次不自删除属性的定时器,用户需要调用定时器删除接口删除定时器,回收定时器资源,避免资源泄露。

七、软件定时器接口

功能类别接口函数描述
创建/删除定时器LOS_SwtmrCreate创建定时器,设置定时器的定时时长、定时器模式、回调函数,并返回定时器ID
LOS_SwtmrDelete删除定时器
启动/停止定时器LOS_SwtmrStart启动定时器
LOS_SwtmrStop停止定时器
获得软件定时器剩余Tick数LOS_SwtmrTimeGet获得软件定时器剩余Tick数

八、代码分析(待续…)

坚持就有收获

在这里插入图片描述

相关文章:

  • 软件测试-APP自动化-测试学习笔记-精华版-知识要点总结,ADB知识要点总结
  • 面试题之项目做过哪些性能优化可以从哪方面说?
  • 人工智能时代
  • Kafka下载(kafka和jdk、zookeeper、SpringBoot的版本对应关系)
  • SpringUtils 工具类,方便在非spring管理环境中获取bean
  • Ubuntu Desktop 开机数字小键盘
  • ChatGPT高效提问—prompt常见用法(续篇九)
  • 讲解用Python处理Excel表格
  • ctfshow-文件上传(web151-web161)
  • 【双指针】:Leetcode611.有效三角形的个数
  • mysql 执行update操作 记录未修改
  • 【Linux系统化学习】文件重定向
  • 每日一题 力扣107 二叉树的层序遍历Ⅱ
  • 使用Autodl云服务器或其他远程机实现在本地部署知识图谱数据库Neo4j
  • WebStorm | 如何修改webstorm中新建html文件默认生成模板中title的初始值
  • 网络传输文件的问题
  • [译] React v16.8: 含有Hooks的版本
  • 【笔记】你不知道的JS读书笔记——Promise
  • 11111111
  • Electron入门介绍
  • JavaScript 基础知识 - 入门篇(一)
  • Java程序员幽默爆笑锦集
  • maven工程打包jar以及java jar命令的classpath使用
  • Mybatis初体验
  • orm2 中文文档 3.1 模型属性
  • PAT A1092
  • PHP 的 SAPI 是个什么东西
  • Redis 懒删除(lazy free)简史
  • Spring-boot 启动时碰到的错误
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • tweak 支持第三方库
  • 电商搜索引擎的架构设计和性能优化
  • 基于Android乐音识别(2)
  • 收藏好这篇,别再只说“数据劫持”了
  • 我看到的前端
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​io --- 处理流的核心工具​
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​渐进式Web应用PWA的未来
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ###STL(标准模板库)
  • #QT(TCP网络编程-服务端)
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (12)Linux 常见的三种进程状态
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • *2 echo、printf、mkdir命令的应用
  • .“空心村”成因分析及解决对策122344
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET国产化改造探索(一)、VMware安装银河麒麟