操作系统需要通过时间来规范其任务,主要介绍时钟节拍和基于时钟节拍的定时器。
时钟节拍
任何操作系统都需要提供一个时钟节拍,以供系统处理所有和时间有关的事件,如线程的延时、线程的时间片轮转调度以及定时器超时等。
RT-Thread 中,时钟节拍的长度可以根据 RT_TICK_PER_SECOND 的定义来调整。 rtconfig.h配置文件中定义:
/*
*频率是1000HZ 周期是1/1000 s
*所以节拍是1ms
*/
#define RT_TICK_PER_SECOND 1000
系统滴答定时器中断处理函数(每1ms触发一次systick定时器中断):
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、定时器
定时器,是指从指定的时刻开始,经过一定的指定时间后触发一个事件,定时器有硬件定时器和软件定时器之分:
硬件定时器: 芯片本身提供的定时功能。一般是由外部晶振提供给芯片输入时钟,芯片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产生时钟中断。
硬件定时器的精度一般很高,可以达到纳秒级别,并且是中断触发方式。