RT-Thread(RTT)时钟节拍的实现和获取

本文详细介绍了RT-Thread中的时钟节拍概念,它是操作系统的基本时间单位。文章讲述了时钟节拍的长度可配置,由中断模式的系统滴答定时器产生,并通过rt_tick_get函数获取实时时钟节拍。通过实际实验验证了获取时钟节拍的正确性。
摘要由CSDN通过智能技术生成

前言

了解RT-Thread的时钟节拍实现,以及如何获取时钟节拍


一、时钟节拍是什么?

时钟节拍 (OS Tick)是RT-Thread操作系统的最小时间单位,任何操作系统都需要提供一个时钟节拍,以供系统处理所有和时间有关的事件,如线程的延时、线程的时间片轮转调度以及定时器超时等。

RT-Thread 中,时钟节拍的长度(就是一个节拍需要多少秒)可以根据 RT_TICK_PER_SECOND 的定义来调整,等于 1/RT_TICK_PER_SECOND 秒。

在rtconfig.h中可以找到时钟节拍的宏定义,更改其值,可以更改时钟节拍的长度
在这里插入图片描述

二、时钟节拍怎么产生的?

1、时钟节拍是由配置为中断模式的系统滴答定时器产生的,在系统滴答定时器初始化函数里会使用到RT_TICK_PER_SECEND这个宏,观察该初始化函数可知,_systick_ms就是多久进一次滴答定时器中断的时间,它是以ms为单位的。所以当我们配置RT_TICK_PER_SECEND宏为1000时,则滴答定时器中断会1ms进一次。
在这里插入图片描述
2、下面是系统滴答定时器中断函数,当我们配置RT_TICK_PER_SECEND为1000时,每过1ms就会进一次这个函数。
在这里插入图片描述
3、在系统滴答定时器中断函数里做了什么呢,我们主要关注如下函数
在这里插入图片描述
进去看看,在rt_tick_increase(void)这个函数里,我们主要关注如下我框起来的变量,每次进一次滴答定时器中断都会使rt_tick变量自加,而我们的中断是1ms产生一次(根据我们配置),所以rt_tick变量就是每过1ms就会自加一次,所以我们只要知道rt_tick的值是多少,就可以知道当前系统运行了多长时间了,可想而知rt_tick应该是一个全局变量
在这里插入图片描述
我们找一下rt_tick,发现它确实是一个全局变量,一上电初始化为0
在这里插入图片描述

三、获取时钟节拍(实验)

1、新建RTT项目

在这里插入图片描述

2、主函数写入如下代码

/*
 * Copyright (c) 2006-2023, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2023-12-14     RT-Thread    first version
 */

#include <rtthread.h>

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>

int main(void)
{
    while(1)
    {
        rt_tick_t tick = 0;
        tick = rt_tick_get();
        rt_kprintf("tick:%u\n",tick);
        rt_thread_mdelay(1000);
    }

    return RT_EOK;
}

3、编译报错

在这里插入图片描述

4、点击错误跳转进去,对这段代码进行注释

在这里插入图片描述

5、编译通过

在这里插入图片描述

6、因为我开发板下载线坏掉了没修,所以使用模拟仿真下载程序,下载模式选择QEMU

在这里插入图片描述

7、会弹出这个框框

在这里插入图片描述

8、我用的是STM32F407,所以选这个

在这里插入图片描述

9、编译一下,然后点下载

在这里插入图片描述

10、在终端这里可以看到打印输出的tick变量

在这里插入图片描述

11、我们函数里写的是每延时1000ms打印一次

在这里插入图片描述

12、可以看到我们的tick每打印一次相差的数值正好是1000,而根据我们之前的配置(RT_TICK_PER_SECEND宏为1000),得知tick每过1ms会自加1,由此看来我们的时钟节拍是正确的

在这里插入图片描述

13、最后提一下获取时钟节拍的函数是rt_tick_get()

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

先睡个好觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值