HRTIMER_MODE_HARD = 0x08, /* 定时器是“硬”的,即该定时器的回调函数在硬中断上下文执行即使是PREEMPT_RT打开的情况 */ HRTIMER_MODE_ABS_PINNED = HRTIMER_MODE_ABS | HRTIMER_MODE_PINNED, HRTIMER_MODE_REL_PINNED = HRTIMER_MODE_REL | HRTIMER_MODE_PINNED, HRTIMER_MODE_ABS_SOFT = HRTIMER_MODE_A...
HRTIMER_MODE_REL_PINNED_HARD = HRTIMER_MODE_REL_PINNED | HRTIMER_MODE_HARD, }; 共有五种基本模式,其它模式都是由这五种组合而成: HRTIMER_MODE_ABS:表示定时器到期时间是一个绝对值。 HRTIMER_MODE_REL:表示定时器到期时间是一个相对于当前时间之后的值。 HRTIMER_MODE_PINNED:表示定时器是否需要绑定到某...
NOHZ_MODE_INACTIVE // 未启用NO_HZ模式 NOHZ_MODE_LOWRES // 启用NO_HZ模式,hrtimer工作于低精度模式下 NOHZ_MODE_HIGHRES // 启用NO_HZ模式,hrtimer工作于高精度模式下 接下来的timerkeeping_valid_for_hres判断timekeeper系统是否支持高精度模式,tick_is_oneshot_available判断tick_device是否支持CLOCK_EVT_MODE...
如果系统允许高精度模式,传入的allow_nohz参数为false,tick_check_oneshot_change函数返回1,回到上面的hrtimer_run_pending函数,hrtimer_switch_to_hres函数将会被调用,已完成切换到NOHZ_MODE_HIGHRES高精度模式。
hrtimer_init(&vibe_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); vibe_timer.function = timer_func; /* 设置定时器的回调函数,定时器到时该函数将被调用 */ static enum hrtimer_restart timer_func(struct hrtimer *timer) 注:该回调函数为原子操作不能被中断 ...
if (clock_id == CLOCK_REALTIME && mode & HRTIMER_MODE_REL) clock_id = CLOCK_MONOTONIC;base = softtimer ? HRTIMER_MAX_CLOCK_BASES / 2 : 0; base += hrtimer_clockid_to_base(clock_id); timer->is_soft = softtimer; timer->is_hard = !!(mode & HRTIMER_MODE_HARD); ...
enumhrtimer_mode mode); which_clock可以是CLOCK_REALTIME、CLOCK_MONOTONIC、CLOCK_BOOTTIME中的一种,mode则可以是相对时间HRTIMER_MODE_REL,也可以是绝对时间HRTIMER_MODE_ABS。设定回调函数: [cpp]view plaincopy timer.function = hr_callback; 如果定时器无需指定一个到期范围,可以在设定回调函数后直接使用hrtime...
enum hrtimer_mode mode); which_clock可以是CLOCK_REALTIME、CLOCK_MONOTONIC、CLOCK_BOOTTIME中的一种,mode则可以是相对时间HRTIMER_MODE_REL,也可以是绝对时间HRTIMER_MODE_ABS。设定回调函数: [cpp]view plain copy timer.function = hr_callback; ...
hrtimer初始化时时间格式,HRTIMER_MODE_REL模式需要加上当前时间。 enum hrtimer_mode { HRTIMER_MODE_ABS = 0x0, /* Time value is absolute */ HRTIMER_MODE_REL = 0x1, /* Time value is relative to now */ HRTIMER_MODE_PINNED = 0x02, /* Timer is bound to CPU */ ...
(&timer,CLOCK_MONOTONIC,HRTIMER_MODE_REL); hrtimer_start(&timer,kt,HRTIMER_MODE_REL); timer.function = hrtimer_hander; return 0; } static void __exit test_exit(void) { hrtimer_cancel(&timer); printk("---test over---\r\n"); } module_init(test_init); module_exit(test_exit); MOD...