Linux定时器与延时

内核定时器

依赖硬件定时器中断,内核在硬件中断发生后唤起TIMER_SOFTIRQ软中断,检测各软件定时器是否到期,到期就将定时器处理函数在底半部执行。
Kernel中可以利用一组函数对与定时器调用。

timer_list

用一个timer_list对应一个定时器xxx_timer。
(*function)成员对应timer的handler,long data对应传入参数。(指针可以强转为long在传入,比如传入dev结构体)
unsigned long expires是定时器到期时间,jiffies时间。
需要进行对结构体的初始化,定时器的添加等操作。
注意expires的初始化:

dev->xxx_timer.expires = jiffies + delay;

在handler函数内,如果需要不断触发,需要在最后再添加:

dev->xxx_timer.expires = jiffies + delay;
add_timer(&dev->xxx_timer);

jiffies
jiffies类型为无符号长整型(unsigned long),定义于文件linux\Jiffies.h,每有一次timer IRQ就记录一次。
HZ是内核的变量,驱动用的是内核下的HZ注意不要随便修改。2.6之后为了用户空间方便有US

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值