iis服务器助手广告
返回顶部
首页 > 资讯 > 操作系统 >RT-Thread 时钟管理
  • 433
分享到

RT-Thread 时钟管理

单片机嵌入式硬件RT-Thread 2023-08-30 14:08:48 433人浏览 八月长安
摘要

时钟节拍 任何操作系统都需要提供一个时钟节拍,以供系统处理所有和时间有关的事件,如线程的延时、时间片的轮转调度以及定时器超时等。 RTT中,时钟节拍的长度可以根据RT_TICK_PER_SECOND的定义来调整。rtconfig.h配置文件

时钟节拍

任何操作系统都需要提供一个时钟节拍,以供系统处理所有和时间有关的事件,如线程的延时、时间片的轮转调度以及定时器超时等。

RTT中,时钟节拍的长度可以根据RT_TICK_PER_SECOND的定义来调整。rtconfig.h配置文件中定义:

void SysTick_Handler(void){        rt_interrupt_enter();    HAL_IncTick();    rt_tick_increase();        rt_interrupt_leave();}

获取系统节拍

rt_tick_get();

定时器

定时器,是指从指定的时刻开始,经过一定的指定时间后触发一个事件,定时器有硬件定时器和软件定时器之分:

  • 硬件定时器:芯片本身提供的定时功能,一般由外部晶振提供给芯片输入时钟,芯片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产生时钟中断。
    硬件定时器的精度一般很高,可以达到纳秒级别,并且是中断触发方式。
  • 软件定时器:由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受数目限制的定时器服务。

RTT操作系统提供软件实现的定时器,以时钟节拍(OS Tick)的时间长度为单位,即定时数值必须是OS Tick的整数倍。

RTT提供的两类定时器机制

  1. 单次触发定时器,这类定时器在启动后只会触发一次定时器事件,然后定时器自动停止。
  2. 周期触发定时器,这类定时器会周期性地触发定时器事件,直到用户手动的停止,否则将永远持续执行下去。

根据定时器超时函数执行时所处的上下文环境,RT-Thread的定时器可以分为HARD_TIMER模式和SOFT_TIMER模式。
HARD_TIMER模式:中断上下文
定时器超时函数的要求:执行时间应该尽量短,执行时不应导致当前上下文挂起、等待。例如在中断上下文中执行超时函数不应该试图去申请动态内存、释放动态内存等。

SOFT_TIMER模式:线程上下文
该模式被弃用后,系统会在初始化时创建一个timer线程,然后SOFT_TIMER模式的定时器超时函数都会在timer线程的上下文环境中执行。

定时器工作机制

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

  • 当前系统经过的tick时间rt_tick(当硬件定时器中断来临时,它将加1)。
  • 定时器链表rt_timer_list。系统新创建并激活的定时器都会按照以超时时间排序的方式插入到rt_timer_list链表中。

系统当前tick值为20,在当前系统中以及创建并启动了三个定时器。
分别是定时时间为50个tick的Timer1、100个tick的Timer2和500个tick的Timer3.
这三个定时器分别加上系统当前时间rt_tick=20,从小到大排序链接在rt_timer_list链表中。
在这里插入图片描述
rt_tick随着硬件定时器的触发一直在增加(每一次硬件定时器中断来临,rt_tick变量会加1),50个tick以后,rt_tick从20增长到70,与Timer1的timeout值相等,这时会触发与Timer1定时器相关联的超时函数,同时将Timer1从rt_timer_list链表上删除。同理,100个tick和500个tick过去后,与Timer2和Timer3定时器相关联的超时函数会被触发,接着将Timer2和Timer3定时器从rt_timer_list链表删除。

如果系统当前定时器状态在10个tick以后(rt_tick=30)有一个任务新创建了一个tick值为300的Timer4定时器,由于Timer4定时器的timeout=rt_tick+300=330,因此它被插入到Timer2和Timer3定时器中间,形成如下图所示链表结构:
在这里插入图片描述

高精度延时

此函数只支持低于1个OS Tick的延时,否则SysTick会出现溢出而不能够获取指定的延时时间。
void rt_hw_us_delay(rt_uint32_t us);//只支持小于1ms的延时

来源地址:https://blog.csdn.net/Caramel_biscuit/article/details/132507291

--结束END--

本文标题: RT-Thread 时钟管理

本文链接: https://www.lsjlt.com/news/382988.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • RT-Thread 时钟管理
    时钟节拍 任何操作系统都需要提供一个时钟节拍,以供系统处理所有和时间有关的事件,如线程的延时、时间片的轮转调度以及定时器超时等。 RTT中,时钟节拍的长度可以根据RT_TICK_PER_SECOND的定义来调整。rtconfig.h配置文件...
    99+
    2023-08-30
    单片机 嵌入式硬件 RT-Thread
  • Linux如何管理时间
    这篇文章主要为大家展示了“Linux如何管理时间”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux如何管理时间”这篇文章吧。剪贴板指示器你是否在日常使用中,在多个文档之间的大量使用复制和粘...
    99+
    2023-06-15
  • 十分钟教你学会JAVA中的学生管理系统
      目录 创建学生类 测试类中主界面的代码编写 添加学生信息的代码编写(addStuent) 删除学生信息的代码编写(deleteStudent) 修改学生信息的代码编写(updateStudent) 查看学生信息的代码...
    99+
    2023-08-31
    java 数据库 开发语言
  • Pythonpygame动画游戏循环游戏时钟实现原理
    目录1. 游戏循环和游戏时钟1.1 游戏中的动画实现原理2. 游戏循环3. 游戏时钟1. 游戏循环和游戏时钟 之前几篇文章中,飞机大战游戏中的英雄飞机已经被绘制到屏幕上了,怎么能够让...
    99+
    2024-04-02
  • 钉钉工时管理系统
    在当今数字化时代,许多企业都开始使用钉钉工时管理系统来提高生产效率和减少成本。它可以帮助企业记录员工的出勤情况,跟踪员工的工作时长和工资,以及管理团队工作量。 钉钉工时管理系统的基本功能包括考勤记录、请假记录、报销记录、绩效评估等,可以帮...
    99+
    2023-10-28
    管理系统 工时
  • 3分钟纯 Java 注解搭个管理系统的示例代码
    最近接触到个新项目,发现它用了一个比较有意思的框架,可以说实现了我刚入行时候的梦想,所以这里马不停蹄的和大家分享下。 在我刚开始工作接触的项目都还没做前后端分离,经常需要后端来维护页...
    99+
    2024-04-02
  • 企业车辆太多难以管理,是时候集成化管理了!
    随着社会经济的发展,各企业的事业单位的车辆保有量逐年上升,企业管理人面对各种用车成本及人员管理越来越困难,如何保证单位车辆安全、高效、科学的运营,如何防止管理成本增加和越来越复杂的车队调度、人员匹配、驾乘管理、事故处理,以及涉车事务等,是长...
    99+
    2023-06-05
  • 时刻在握:PHP DateTime 扩展的时间管理利器
    PHP DateTime 扩展是 PHP 中一个强大的工具,可让您轻松处理日期和时间数据。它提供了一系列函数和类,使您可以进行各种操作,例如: 创建和操纵日期和时间对象 将日期和时间转换为不同的格式 比较和计算日期和时间之间的差异 处理...
    99+
    2024-03-06
    PHP DateTime 时间管理日期处理时区转换
  • python 包实现 time 时间管理操作
    目录一、当前时间戳二、获取当前时间字符串三、获取当前计算机时间格式四、格式化时间显示五、字符串转为计算机格式六、精确时间计数值七、休眠等待一、当前时间戳 获取当前时间戳,即当前系统内...
    99+
    2024-04-02
  • 云时代大数据管理引擎HAWQ++
    p.p1 {margin: 0.0px 0.0px 24.0px 0.0px; font: 12.0px 'PingFang SC'; color: #000000; -webkit-text-stroke...
    99+
    2024-04-02
  • 如何使用Jupyter改善时间管理
    本篇内容介绍了“如何使用Jupyter改善时间管理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python 在探索数据方面具有令...
    99+
    2023-06-15
  • SpringBoot2 中怎么使用 QuartJob 实现定时器实时管理
    本篇文章给大家分享的是有关SpringBoot2 中怎么使用 QuartJob 实现定时器实时管理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、QuartJob简介1、一句...
    99+
    2023-06-02
  • 时间管理大师班:用 PHP DateTime 扩展驯服时间
    PHP DateTime 扩展概述 PHP DateTime 扩展是 PHP 标准库中用于处理日期和时间数据的扩展。它提供了一系列类和方法,使开发者能够轻松地创建、操作和格式化日期和时间值。DateTime 扩展是面向对象的,因此它使用...
    99+
    2024-02-21
    PHP DateTime 日期 时间 操作 格式化
  • 怎么解析Linux系统的时间管理
    本篇文章为大家展示了怎么解析Linux系统的时间管理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 3.3 系统时间管理3.3.1 时间分类    在Linu...
    99+
    2023-06-06
  • 多站点管理:步入管理网站的新时代,成就事业辉煌
    多站点管理是一种强大且有效的技术,可以让您轻松地管理和控制多个网站。它使您能够在单一平台上管理多个网站,从而简化管理流程,节省时间和资源。使用多站点管理,您可以轻松地创建和管理用户、设置权限、安装插件和主题,以及更新网站内容。 Word...
    99+
    2024-02-03
    多站点管理 WordPress 网站管理 网站控制
  • C++ 内存管理:何时使用 new 和 delete
    c++++ 中使用 new 和 delete 来管理内存。new 用来在堆内存中动态分配对象,delete 用来释放使用 new 分配的内存块,避免内存泄漏。new 运算符向操作系统请求...
    99+
    2024-05-04
    c++ 内存管理
  • Flutter状态管理Bloc之定时器示例
    本文实例为大家分享了Flutter状态管理Bloc之定时器的具体代码,供大家参考,具体内容如下 1. 依赖 dependencies:   flutter_bloc: ^2.1.1 ...
    99+
    2024-04-02
  • 时间的守护者:PHP DateTime 扩展的时间对象管理
    PHP DateTime 扩展的概述 PHP DateTime 扩展提供了一套全面的类和方法,用于操作和表示 PHP 中的时间对象。DateTime 类是扩展的核心,它允许开发者创建表示日期和时间的新对象。开发者还可以使用 DateTi...
    99+
    2024-03-06
    PHP、DateTime、时间对象、时间管理、时区
  • PHP DateTime 扩展的时间胶囊:保存和管理时间值
    PHP DateTime 扩展提供了一种表示、操作和格式化时间和日期值的方法。它简化了与时间相关的任务,例如日期比较、时间戳转换和时区转换。 类和方法 DateTime 类 __construct(): 创建一个新的 DateTime ...
    99+
    2024-04-02
  • Spring动态管理定时任务之ThreadPoolTaskScheduler解读
    目录Spring动态管理定时任务ThreadPoolTaskScheduler实现思路ThreadPoolTaskScheduler 定时任务实现总结Spring动态管理定时任务Th...
    99+
    2022-12-28
    Spring动态管理定时任务 ThreadPoolTaskScheduler Spring定时任务
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作