[Linux 基础] -- Linux内核高精度定时器hrtimer使用实例

一、

内核为高精度定时器重新设计了一套软件架构,它可以为我们提供纳秒级的定时精度,以满足对精确时间有迫切需求的应用程序或者内核驱动,以下学习使用 hrtimer(high resolution timer)高精度定时器。

二、

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);

三、设置超时回调函数

timer.function = hr_callback;

四、

使用 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);

五、使用 hrtimer_cancel 取消一个 hrtimer

int hrtimer_cancel(struct hrtimer *timer);

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

enum hrtimer_restart {
    HRTIMER_NORESTART,
    HRTIMER_RESTART,
};

七、把 hrtimer 的到期时间推进一个 tick 周期,返回 HRTIMER_RESTART 表明该 hrtimer 需要再次启动,以便产生一个 tick 事件。

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

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值