本文分享自中移OneOS微信公众号《时钟管理》。

时钟管理包含两部分,第一部分是操作系统最小时间单位(时钟节拍),第二部分是基于时钟节拍的定时器,下面分别展开描述。

时钟节拍

时钟节拍是特定的周期性中断,这个中断可以看做是系统心跳。系统心跳的时间间隔取决于不同的应用,一般是1ms~100ms。这种周期性中断使得内核可以将任务延迟若干个时钟节拍,以及当任务等待事件发生时,提供等待超时等依据。时钟节拍率越快,系统的额外开销就越大。

系统心跳产生时,会在中断处理函数中调用一次os_tick_increase(),通知操作系统过了一个时钟节拍的时间。在os_tick_increase()中,首先将系统时间自增1,然后检查正在运行的任务时间片是否耗尽,如果耗尽则进行任务切换,最后检查是否有定时器超时,如果有超时则执行对应的回调函数。

定时器管理

定时器分为硬件定时器和软件定时器。

硬件定时器是由CPU提供,软件通过驱动接口配置相关的寄存器,来控制定时器的超时时间等,超时后CPU会产生时钟中断,达到定时的效果。硬件定时器精度较高,可以达到纳秒级别,但是数量有限。

软件定时器是操作系统提供,是以硬件定时器为基础提供一类系统接口,可以提供不限数量的定时器,但是相较于硬件定时器精度较差,超时时长必须是时钟节拍的整数倍。

根据触发模式,软件定时器分为单次触发模式和周期触发模式;根据超时函数执行的上下文环境,软件定时器又分为中断模式和任务模式。

中断模式是在系统心跳的中断函数中执行,要求超时处理函数的执行时间尽量短,不能进行动态内存申请、等待信号量等操作,否则会导致其他中断响应时间变长或占用其他任务执行时间。系统定时器默认使用中断模式,创建定时器时可使用参数OS_TIMER_FLAG_HARD_TIMER来指定。

任务模式是在任务上下文中执行,默认不开启,可以通过OS_USING_TIMER_SOFT来启用。该模式下,系统初始化时会创建一个timer任务,该模式定时器的超时函数在timer任务的上下文中执行。创建定时器时可使用参数OS_TIMER_FLAG_SOFT_TIMER来指定。

时钟管理接口设计如下:

(1)获取系统tick

(2)创建定时器

(3)销毁定时器

(4)启动定时器

(5)停止定时器

(6)控制定时器

好啦,时钟管理就介绍到这啦,如果有想了解的内容,欢迎在评论区里一起交流哦~

搞懂时钟管理,看这个就好啦~相关推荐

  1. 【嵌入式】初学者一步一步搞懂内存管理

    [嵌入式]初学者一步一步搞懂内存管理 一.C语言局部变量.静态局部变量.全局变量与静态全局变量 基本概念 局部变量 全局变量 局部变量和全局变量的对比 二.虚拟地址空间.(深入理解计算机系统) bss ...

  2. 一下子搞懂JDBC,看这篇就够了--以MySQL为例。

    一下子搞懂JDBC,看这篇就够了–以MySQL为例. 文章目录 一下子搞懂JDBC,看这篇就够了--以MySQL为例. 一.什么是JDBC? 二.JDBC的使用步骤 三.jdbc进阶--上述各个类或接 ...

  3. 彻底清楚搞懂toRef和toRefs是什么,也许你知道toRef和toRefs,一直有点蒙蔽,一直没搞懂它,看完这篇文章你彻底清楚

    首先我们知道为什么要用toRef和toRefs,这篇文章让你彻底搞懂 比如我们使用 reactive来创建一个对象 <script> import {reactive} from &quo ...

  4. 非线性薛定谔方程_五分钟彻底搞懂“薛定谔方程”,看后绝对不在迷惑了

    前面几期文章我主要围绕微观世界的不确定性.叠加态等概念来讲解,其中主要讲解了爱因斯坦对微观世界的理解,以及哥本哈根学派对微观世界的解释.其实通过前面的文章我们可以看出,微观世界的确和我我们宏观世界差距 ...

  5. 【Verilog基础】一文搞懂 时钟门控(Clock-Gating) 电路

    面试常考知识点: 1.(只用逻辑门实现门控)对于只用与门(与非门)实现门控时钟时,使能信号只能在时钟低电平期间跳变:对于只用或门(或非门)实现门控时钟时,使能信号只能在时钟高电平期间跳变: 2.(锁存 ...

  6. 搞懂缓冲区,看这篇文章就够了

      不管是操作系统,还是学语言,大家应该都听过缓冲区,那么什么是缓冲区?缓冲区又位于什么地方?在这篇文章,小编将带你了解缓冲区.❄️❄️❄️先让我们欣赏下面的一张图,让我们恭僖EDG夺得冠军.❄️❄️ ...

  7. 肝了一早上,终于把mybatis的一级缓存和二级缓存原理搞懂了~

    今天的沉淀,是助力明天飞向远方的基石~ 每当自己沉思下来写学习文章的时候,内心深处总是会得到一片宁静. 缓存的概念 我们在查询数据时,经常去查询一些条件相同.数据的正确与否对最终结果影响不大的数据,并 ...

  8. 想要彻底搞懂“异地多活”,看完这篇就够了

    在软件开发领域,「异地多活」是分布式系统架构设计的一座高峰,很多人经常听过它,但很少人理解其中的原理. 异地多活到底是什么?为什么需要异地多活?它到底解决了什么问题?究竟是怎么解决的? 这些疑问,想必 ...

  9. 从零开始学网络|搞懂OSI参考模型和TCP/IP分层模型,看这篇文章就够了

    来源 | 网络工程师笔记 前言 今天和大家一起谈谈"网络",之前写的文章可能不太通俗易懂,有人就问我可不可以写些比较容易理解的文章,我想了想那就从头说起吧! 那么什么是网络呢? 百 ...

最新文章

  1. 数据结构之【栈】的基本操作C语言实现
  2. MicroPython支持的开发板:高性能、低成本创客首选
  3. ML之XGBoost:XGBoost参数调优的优秀外文翻译—《XGBoost中的参数调优完整指南(带python中的代码)》(四)
  4. 解决高并发的问题python_python ---解决高并发超卖问题
  5. IE 7.0抛弃Win2000用户?(zz)
  6. Js和jQuery的文档就绪函数以及执行次数
  7. oracle关于时间的处理,如计算间隔天数、获取本年第一天、上月第一天、上月最后一天
  8. python画3d图-Python 绘制酷炫的三维图步骤详解
  9. 大数据对企业竞争的作用
  10. VS2015编译VS2013工程文件出错
  11. 想要给视频去色有什么方法?原来用这个就可以了
  12. javaweb面试题2
  13. 在ubuntu创建快捷方式
  14. Tensorflow (2): tf.slim库解读
  15. Problem Z: 亲戚
  16. 基于Python 实现 Spirent TestCenter 自动化
  17. 在iOS设备上安装Windows、Linux等操作系统!
  18. 易基因项目文章 | 90天见刊,易基因m6A RNA甲基化(MeRIP)+转录组组学研究
  19. 绵阳师范学院2021计算机考试,绵阳师范计算机学院2021年招生计划
  20. FPGA烧录程序遇到的问题

热门文章

  1. css 只改变父元素的透明度,不改变子元素透明度rgba+opacity
  2. Mac如何设置盖上电脑盖不待机,能够播放音乐。
  3. javaweb开发设计Service层
  4. Deferred 对象
  5. .NET平台2008年大事记
  6. shell脚本返回值及其使用场景
  7. 带你一步一步实现通讯录的设计
  8. pdf转换成ppt转换器
  9. 搭建powerpc交叉编译工具链
  10. 2018中美创新链接峰会8月1日举行,聚焦AI与区块链