6ull Linux驱动开发笔记(四)内核定时器

jiffies变量

Linux 内核使用全局变量 jiffies 来记录系统从启动以来的系统节拍数。频率是位于 include/asm-generic/param.hUSER_HZ一般是100HZ。

extern u64 __jiffy_data jiffies_64;

extern unsigned long volatile __jiffy_data jiffies;

jiffies_64用64位系统;jiffies用于32位系统。

将 jiffies 类型的参数 j 分别转换为对应的毫秒、 微秒、纳秒。

int jiffies_to_msecs(const unsigned long j) 
u64 jiffies_to_nsecs(const unsigned long j)                                                         
int jiffies_to_usecs(const unsigned long j)                                                           

将毫秒、微秒、纳秒转换为 jiffies 类型。

long msecs_to_jiffies(const unsigned int m)
long usecs_to_jiffies(const unsigned int u)
unsigned long nsecs_to_jiffies(u64 n) 

内核定时器

timer_list 结构体里expires 成员变量表示超时时间,单位为节拍数。比如我们现在需要定义一个周期为 2 秒的定时器,(频率)HZ=1000,那么这个定时器的超时时间就是 jiffies+(2*HZ),因此 expires=jiffies+(2*HZ)。function 就是 定时器超时回调函数。超时以后就会自动关闭,因此如果想要实现周期性定时,那么就需要在定时处理函 数中重新开启定时器。

struct timer_list {
 struct list_head entry;
 unsigned long expires; /* 定时器超时时间,单位是节拍数 */
 struct tvec_base *base;
 void (*function)(unsigned long); /* 定时处理函数 */
 unsigned long data; /* 要传递给 function 函数的参数 */
 int slack;
};

初始化定时器函数

void init_timer(struct timer_list *timer)

timer:要初始化定时器。 返回值:没有返回值。

add_timer 函数用于向 Linux 内核注册定时器,使用 add_timer 函数向内核注册定时器以后, 定时器就会开始运行。

void add_timer(struct timer_list *timer)

del_timer 函数用于删除一个定时器,不管定时器有没有被激活,都可以使用此函数删除。

int del_timer(struct timer_list * timer)

del_timer_sync 函数是 del_timer 函数的同步版,会等待其他处理器使用完定时器再删除, del_timer_sync 不能使用在中断上下文中。

int del_timer_sync(struct timer_list *timer)

mod_timer 函数用于修改定时值,如果定时器还没有激活的话,mod_timer 函数会激活定时 器!函数原型如下:

 int mod_timer(struct timer_list *timer, unsigned long expires) 

timer:要修改超时时间(定时值)的定时器。 expires:修改后的超时时间。 返回值:0,调用 mod_timer 函数前定时器未被激活;1,调用 mod_timer 函数前定时器已 被激活。

void ndelay(unsigned long nsecs)
void udelay(unsigned long usecs)     //纳秒、微秒和毫秒延时函数。
void mdelay(unsigned long mseces)
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值