概述
本文简单解释一下高精度定时器的主要函数接口以及实现细节。
- hrtimer_init
(struct hrtimer *timer, clockid_t clock_id, enum hrtimer_mode mode)
高精度定时器的初始化,这里有两个参数要特别注意,clock_id和mode,其中clock_id指定基于哪一个时间域来做定时,一般来说有两个选择CLOCK_REALTIME和CLOCK_MONOTONIC,前者是实际的系统时间,如果修改了系统时间,那么定时行为也会相应改变;后者是单调递增时间,不随系统时间改变。mode一般来说也是有两个选择,HRTIMER_MODE_ABS和HRTIMER_MODE_REL,前者指定绝对时间,后者指定相对时间。
- hrtimer_start
static inline void hrtimer_start(struct hrtimer *timer, ktime_t tim,
const enum hrtimer_mode mode)
启动定时器,这里的mode表示tim的时间格式,如果HRTIMER_MODE_ABS则tim是一个绝对时间,否则是一个相对时间。
该函数主要是调用enqueue_hrtimer根据超时时间将定时器插入到红黑树上去,红黑树最右边是超时时间离现在最近的定时器。很明显,定时器超时后,在对应的中断处理函数中,从右边依次取出定时器处理即可,如果某个定时器的超时时间还没到,那么其后面的定时器超时时间肯定也没到。
- hrtimer_interrupt
高精度定时器超时处理函数。该函数处理逻辑其实非常简单,就是从红黑树依次取出定时器,如果超时就调用其超时处理函数即可。除此以外,还有一个非常重要的工作,就是配置下一次的超时时间,这个是通过__hrtimer_get_next_event和tick_program_event两个函数实现的,比较简单就不再祥诉了,最终是调用定时器提供的set_next_event回调函数配置timer的寄存器,配置下一次的超时时间。 - hrtimer_forward_now/hrtimer_forward
设置定时器的下一次超时时间,这里只是设置本定时器的下一次超时时间,但是并不会立即配置到timer寄存器中去。
最后
以上就是朴素手机为你收集整理的时间子系统四——高精度定时器分析的全部内容,希望文章能够帮你解决时间子系统四——高精度定时器分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复