RT-Thread编程指南 要点摘录(三)——时钟管理

——
本章主要介绍时钟节拍和基于时钟节拍的定时器。

1时钟节拍

操作系统中最小的时间单位是时钟节拍 (OS Tick),其作用在于供系统处理所有和时间有关的事件,如线程的延时、线程的时间片轮转调度以及定时器超时等,每经过一个时钟节拍时,都会检查当前线程的时间片是否用完,以及是否有定时器超时。
时钟节拍是特定的周期性中断,相当于系统心跳,中断之间的时间间隔取决于不同的应用。
系统时间是从系统启动开始计数的时钟节拍数。
时钟节拍由触发为中断触发模式的硬件定时器产生(在cortex-M中为systick),不同硬件定时器中断实现都不同。

2定时器管理

2.1基本概念

定时器分为两类:

  1. 硬件定时器——芯片提供。硬件定时器的精度一般很高,并且是中断触发方式。
  2. 软件定时器——操作系统提供。软件定时器是由操作系统提供的一系列接口(函数),它构建在硬件定时器基础之上,使系统能够提供不受数目限制的定时器服务。

RT-Thread 操作系统提供软件实现的定时器,以时钟节拍(OS Tick)的时间长度为单位。

2.2 RT-Thread 定时器介绍

RT-Thread 的定时器提供两类定时器机制:

  1. 单次触发定时器——只触发一次定时器事件
  2. 周期触发定时器——周期性触发直到用户手动停止

根据超时函数执行时所处的上下文环境,RT-Thread 定时器又可分为:

  1. HARD_TIMER模式——定时器超时函数在中断上下文环境中执行(此为默认方式,即定时器超时后,超时函数是在系统时钟中断的上下文环境中运行的)。在中断上下文环境中执行时,对于超时函数的要求与中断服务例程的要求相同:执行时间应该尽量短,执行时不应导致当前上下文挂起、等待。
  2. SOFT_TIMER模式——定时器超时函数在 timer 线程的上下文环境中执行。该模式被启用后,系统会在初始化时创建一个 timer 线程。

2.3定时器工作机制

在 RT-Thread 定时器模块中维护着两个重要的全局变量:

  1. 当前系统经过的 tick 时间 rt_tick。每一次硬件定时器中断来临,rt_tick 变量会加 1
  2. 定时器链表 rt_timer_list

系统新创建并激活的定时器都会按照以**超时时间(timeout)**即定时时间从小到大排序的方式插入到定时器链表中(新创建的定时器同样如此)。
在这里插入图片描述

上图中系统当前 tick 值为 20,在当前系统中已经创建并启动了三个定时器,分别是定时时间为 50 个 tick 的 Timer1、100 个 tick 的 Timer2 和 500 个 tick 的 Timer3,这三个定时器分别加上系统当前时间 rt_tick=20,从小到大排序链接在 rt_timer_list 链表中

如果有定时器超时,将调用相应的超时函数。
所有定时器在定时超时后都会从定时器链表中被移除,但周期性定时器会在它再次启动时被加入定时器链表。

2.4定时器跳表算法

rt_timer_list是一个有序链表,RT-Thread 中使用了跳表算法来加快搜索链表元素的速度。
跳表是链表的一种,但它在链表的基础上增加了 “跳跃” 功能,这是一种通过 “空间来换取时间” 的算法,因此需要更多的内存空间。

一个有序链表见下图,在该链表中搜索元素{9},需要比较的次数为5:
在这里插入图片描述
使用跳表算法,将一些节点提取出来作为索引(图中1、5、9、13为一级索引),同样在该链表中搜索元素{9},需要比较的次数为3(通过比较1、5、9)
在这里插入图片描述
从一级索引提取一些元素出来,作为二级索引,这样更能加快元素搜索。在该链表中搜索元素{9},需要比较的次数为2(通过比较5、9)

在这里插入图片描述
定时器跳表可以通过上层的索引,在搜索的时候就减少比较次数,进而提升查找的效率。

2.5定时器的管理方式

在这里插入图片描述

3高精度延时

当需要实现比时钟节拍更短时间长度的系统定时时,只能通过读取系统某个硬件定时器的计数器或直接使用硬件定时器的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值