前言
任何操作系统都需要提供一个时钟节拍,以供系统处理所有和时间有关的事件,如线程的延时、线程的时间片轮转调度以及定时器超时等。
时钟节拍
1.调整时钟节拍长度
RT-Thread 中,时钟节拍的长度可以根据 RT_TICK_PER_SECOND 的定义来调整。 rtconfig.h配置文件中定义:
*频率是1000HZ 周期是1/1000 s
*所以节拍是1ms
*/
#define RT_TICK_PER_SECOND 1000
如何查找到:
修改这个地方就可以控制每秒增加的节拍数,1000为每秒增加1000个tick。
2.系统滴答定时器中断处理函数
void SysTick_Handler(void)
{
...
rt_tick_increase(); //++ rt_tick;全局变量自加,记录的是系统启动到现在的时钟节拍数
...
}
若RT_TICK_PER_SECOND为1000则1ms出发一次,若为100则10ms触发一次。
如何寻找到:
3.获取系统计数函数
/**
* This function will return current tick from operating system startup
*
* @return current tick
*/
rt_tick_t rt_tick_get(void)
实例代码
#include <rtthread.h>
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
int main(void)
{
int i = 0;
rt_tick_t tick = 0;
for(i = 0; i < 10; i++)
{
tick = rt_tick_get();
rt_kprintf("tick:%u\n", tick);
rt_thread_mdelay(500);
}
return RT_EOK;
}
实现效果
当RT_TICK_PER_SECOND定义为1000时
使用SecureCRT打印为:
发现每次打印时tick都大约增加了500,这是因为每次打印之后程序休眠500ms的原因,而tick依然再增加的原因。
当RT_TICK_PER_SECOND定义为1000时
#define RT_TICK_PER_SECOND 10000
结果为:
发现每次打印时tick都大约增加了5000,这是因为将RT_TICK_PER_SECOND设置为了10000的原因,相当于每100微妙tick+1。
同理,当RT_TICK_PER_SECOND定义为100时,每次打印就增加50啦。
对了,实验完了之后记得把RT_TICK_PER_SECOND改回1000。
总结
以上就是获取时钟节拍的实验过程。
博客编辑方法:如何写好一篇CSDN博客——小白入门(自用)
参考的学习视频:2021最新RT-Thread实时操作系统教程,入门到精通全套完整版
以前的学习笔记(从上到下按照时间从早到晚):
【RT-Thread】自我学习笔记→第零章→创建项目