hrtimer是Linux内核中实现高精度定时器的一种方式,它提供了更精确的时间控制和更灵活的定时器管理能力。hrtimer_init函数就是用来初始化这种高精度定时器的函数。 hrtimer_init函数的主要作用就是初始化并注册一个hrtimer任务,以便在以后的使用中能够准确地定时执行。在调用hrtimer_init函数之前,需要先定义一个hrtimer结构...
hrtimer_cpu_base_init_expiry_lock(cpu_base); return 0; } 3.2 定时器初始化 hrtimer_init 在将一个高分辨率定时器插入并激活之前,首先需要调用hrtimer_init函数对其进行初始化: void hrtimer_init(struct hrtimer *timer, clockid_t clock_id, enum hrtimer_mode mode) { debug_init(timer, clock_id, mod...
tick_init_highres函数把tick_device切换到CLOCK_EVT_FEAT_ONESHOT模式,同时把clock_event_device的回调handler设置为hrtimer_interrupt,这样设置以后,tick_device的中断回调将由hrtimer_interrupt接管,hrtimer_interrupt在上面已经讨论过,它将完成高精度定时器的调度和到期处理。 接着,设置hres_active标志,以表明高精度模式...
hrtimer_init最终会进入__hrtimer_init函数,该函数的主要目的是初始化hrtimer的base字段,同时初始化作为红黑树的节点的node字段: [cpp]view plain copy 1. static void __hrtimer_init(struct hrtimer *timer, clockid_t clock_id, 2. enum hrtimer_mode mode) 3. { 4. struct...
1). hrtimer_init初始化定时器工作模式。 hrtimer_init(&vibe_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); vibe_timer.function = timer_func; /* 设置定时器的回调函数,定时器到时该函数将被调用 */ static enum hrtimer_restart timer_func(struct hrtimer *timer) ...
tick_init_highres函数把tick_device切换到CLOCK_EVT_FEAT_ONESHOT模式,同时把clock_event_device的回调handler设置为hrtimer_interrupt,这样设置以后,tick_device的中断回调将由hrtimer_interrupt接管,hrtimer_interrupt在上面已经讨论过,它将完成高精度定时器的调度和到期处理。
循环定时可以在回调函数中调用hrtimer_forward_now()重新设置定时时间,然后将返回值设置为HRTIMER_RESTART代表重启定时器,就可以做到循环定时的效果。 每隔一秒输出“hrtimer handler”: #include <linux/init.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/ktime.h>#include <linux/hrtimer...
1). hrtimer_init初始化定时器工作模式。 hrtimer_init(&vibe_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); vibe_timer.function = timer_func; /* 设置定时器的回调函数,定时器到时该函数将被调用 */ static enum hrtimer_restart timer_func(struct hrtimer *timer) ...
struct hrtimer结构体中最主要的成员就是回调函数function,回调函数的返回值可以为HRTIMER_NORESTART或HRTIMER_RESTART。HRTIMER_NORESTART代表不需要重启定时器,HRTIMER_RESTART代表需要重启定时器。 最常用的接口如下: hrtimer_init(structhrtimer *timer, clockid_t clock_id ,enumhrtimer_mode mode) ...
hrtimer_init最终会进入__hrtimer_init函数,该函数的主要目的是初始化hrtimer的base字段,同时初始化作为红黑树的节点的node字段: [cpp]view plaincopy staticvoid__hrtimer_init(structhrtimer *timer, clockid_t clock_id, enumhrtimer_mode mode) { structhrtimer_cpu_base *cpu_base; ...