hrtimer
来源:互联网 发布:婚纱照排版台词 知乎 编辑:程序博客网 时间:2024/06/01 08:16
hrtimer
这两个成员(hrtimer.node.expires, hrtimer._softexpires)通常是相等(即hrtimer到期时间是未来的一个时间点,即hrtimer_start_range_ns的delta_ns参数为0),但是有些时候,用户希望到期时间是一个区间的时候,而不是一点的时候,这两个成员就不相等了,_softexpires成员保存的是这个区间的开始时间,expires成员保存的是这个区间的结束时间。
CODE EXAMPLE:
1,创建hrtimer,设置callback
2,设置hrtimer第一次超时时间值(或超时时间range,即hrtimer_start_range_ns的delta_ns参数不为0),然后就触发timer,下面的设置超时是一个range,原因是"ensure that any interval is >= 50us so we don't get stuck in IRQ"
可以参考上面本人加的代码的注释
3, callback函数(这里是emtimer_hrtimer)中, 会重新设置超时时间(可以与第一次hrtimer_start_range_ns设置的超时时间不一样),注意新设置的超时仍然是一个range,即[_softexpires, node.expires],在hrtimer_add_expires中实现
hrtimer_forward_now->hrtimer_forward->hrtimer_add_expires(timer, t->period):
即
timer->node.expires = timer->_softexpires +timeout_value //timeout_value就是上述t->period
timer->_softexpires = timer->_softexpires + timeout_value
我们可知, _softexpires,node.expires的值是往前推进的(即下一次超时的range),且始终node.expires与_softexpires相差第一次设置timer时hrtimer_start_range_ns的参数delta_ns, 即node.expires-_softexpires=delta_ns.
因为_softexpires,node.expires的值都是在上次的值基础上计算的。
4,下面看一下hrtimer_forward_now的返回值的意义,即是hrtimer_forward的返回值。
在hrtimer_forward函数中,如果当前时间比定时器到期时间要早(即定时器来早了,调用定时器callback函数也就早了,即定时器到来的时间落在了上述代码所配的range范围之前),不会进行任何操作, 直接返回0(即hrtimer_forward_now的返回值overruns=0),这样就不会执行下面的hrtimer_add_expires函数来更新下次定时器到期时间(区间),这样的话在本次定时器真正到期时,又会触发一次调用上述定时器callback函数(emtimer_hrtimer), 这样的话,本次定时周期内来了两次定时到期通知(调用callback函数),这样就破坏了定时器每周期产生一次到期的预期。 改进方案是在callback函数emtimer_hrtimer中判断如果定时器来的早了(overruns=0),就直接更新下次定时器到期时间,这样定时器就只会在下次到期时触发了。这样就保证了定时器在每次定时周期到期时只来一次。
修改如下:
阅读全文
1 0
- hrtimer
- Hrtimer
- hrtimer
- hrtimer小记
- Linux hrtimer的实现
- hrtimer定时器的使用
- Linux: hrtimer 用法
- hrtimer + clockevent + Timekeeping
- hrtimer + clockevent + Timekeeping
- hrtimer、hrtimer_init()使用
- hrtimer内核配置
- Linux: hrtimer 用法
- hrtimer的简单使用
- Linux: hrtimer 用法
- linux时间子系统 - hrtimer
- Linux hrtimer分析(一)
- Linux hrtimer分析(2)
- Linux hrtimer分析(一)
- C
- ABAP报表事件说明
- Android Studio 如何打JAR包
- UGUI 圆角矩形控件实现
- hdu 6129 多校第7场10
- hrtimer
- 数据库知识点总结
- golang语言之groupcache
- 将Java中的实体类转换成axis2的xml对象模型(OMElement)
- ActionMenuView的使用
- applicationContext.xml约束
- 新郎新年结婚问题-java
- selenium+webdriver 对浏览器的基本操作
- Java操作PDF之iText入门