操作系统需要通过时间来规范其任务,主要介绍时钟节拍和基于时钟节拍的定时器。

时钟节拍

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

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

/* 
 *频率是1000HZ 周期是1/1000 s
 *所以节拍是1ms
 */
#define RT_TICK_PER_SECOND 1000
系统滴答定时器中断处理函数(每1ms触发一次systick定时器中断):

RT-Thread时钟管理-LMLPHP

1.2、获取系统节拍

1.2.1、获取系统计数函数

**
 * This function will return current tick from operating system startup
 *
 * @return current tick
 */
rt_tick_t rt_tick_get(void)

1.2.2、实例
/*
 *...
 *[D/main] tm:7018

 *[D/main] tm:8020

 *[D/main] tm:9022

 *[D/main] tm:10024
 *...
 */
int main(void)
{
    rt_tick_t tm = 0;
    LOG_D("Hello RT-Thread!");
    while (1)
    {
        tm = rt_tick_get();
        LOG_D("tm:%-d\n",tm);
        rt_thread_mdelay(1000);
    }

    return RT_EOK;
}

1.3、定时器

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

硬件定时器: 芯片本身提供的定时功能。一般是由外部晶振提供给芯片输入时钟,芯片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产生时钟中断。

硬件定时器的精度一般很高,可以达到纳秒级别,并且是中断触发方式。

04-19 11:38