我是靠谱客的博主 忧郁母鸡,最近开发中收集的这篇文章主要介绍hrtimer使用步骤基本使用内核机制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

内核的时钟,关系内核的调度等。

高精度时钟和 传统tick如何并存的?

高精度时钟 在驱动硬件 所需要的精确延时场景外,还有哪些应用场景?

基本使用

变量定义: struct hrtimer hrtimer_test_timer;   ktime_t m_kt

一:

初始化时钟: hrtimer_init(&hrtimer_test_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);

      设置超时后的回调函数:hrtimer_test_timer.function = hrtimer_test_timer_poll;

hrtimer_init函数初始化定时器工作模式。which_clock可以是CLOCK_REALTIME、CLOCK_MONOTONIC、CLOCK_BOOTTIME中的一种,mode则可以是相对时间HRTIMER_MODE_REL,也可以是绝对时间HRTIMER_MODE_ABS。

void hrtimer_init(struct hrtimer *timer, clockid_t which_clock,
             enum hrtimer_mode mode);

二、激活定时器 
使用hrtimer_start激活该定时器。根据time和mode参数的值计算hrtimer的超时时间,并设置到timer->expire域。 expire设置的是绝对时间,所以如果参数mode的值为HRTIMER_MODE_REL(即参数tim的值为相对时间),那么需要将tim的值修正为绝对时间:expire = tim + timer->base->get_time(),调用enqueue_hrtimer,将hrtimer加入到红黑树中。

int hrtimer_start(struct hrtimer *timer, ktime_t tim,        const enum hrtimer_mode mode);

   m_kt=ktime_set(1, ( 5) * 1000000);   //ktime_set函数参数:第一个是秒,第二个是纳秒,*1000000就是毫秒。

   hrtimer_start(&hrtimer_test_timer,m_kt, HRTIMER_MODE_REL);

三、定时器处理接口

时钟回调函数:
static enum hrtimer_restart  hrtimer_test_timer_poll(struct hrtimer *timer)
{    
    hrtimer_forward(timer, timer->base->get_time(), m_kt);//hrtimer_forward(timer, now, tick_period);  
    return HRTIMER_RESTART;

}
定时器一旦到期,function字段指定的回调函数会被调用,该函数的返回值为一个枚举值,它决定了该hrtimer是否需要被重新激活。

enum hrtimer_restart {
    HRTIMER_NORESTART,    /* Timer is not restarted */
    HRTIMER_RESTART,    /* Timer must be restarted */
};
把hrtimer的到期时间推进一个tick周期,返回HRTIMER_RESTART表明该hrtimer需要再次启动,以便产生下一个tick事件。 

    hrtimer_forward(timer, now, tick_period);
 
    return HRTIMER_RESTART;

四、使用hrtimer_cancel取消一个hrtimer。

int hrtimer_cancel(struct hrtimer *timer);

内核机制

(6条消息) Linux内核时钟系统和定时器实现_walker沃克的博客-CSDN博客_itimerspec 
 

一文入门linux内核高精度定时器hrtimer机制 - 知乎 (zhihu.com)    

以arm为例子进行分析

盘一盘Linux内核中ns级别的高精度计时方法 - 知乎 (zhihu.com)

最后

以上就是忧郁母鸡为你收集整理的hrtimer使用步骤基本使用内核机制的全部内容,希望文章能够帮你解决hrtimer使用步骤基本使用内核机制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(76)

评论列表共有 0 条评论

立即
投稿
返回
顶部