在Linux内核中,软件定时器是一种基于软件的定时机制,用于在预定的时间间隔后执行指定的操作或回调函数。它是一种轻量级的定时器,适用于需要相对较低精度的时间间隔处理。
- 何为定时器
内核定时器有个明显特点 就是单次计数,回调函数执行后需要再次激活定时器。
- 什么 是软件定时器
在内核中我们为什么要用软件定时器,而不是硬件定时器呢? 原因之一是为了“车同轨,书同文”,是为了通用!!!
- 在内核中怎么使用软件定时器
要想在内核中使用软件定时器,首先得用 struct timer_list 定义一个定时器,然后调timer_setup();
函数初始化定时器,然后在合适的的地方调用 mod_timer();激活定时器。
- API函数介绍
timer_setup(timer, callback, flags)
这个函数为宏函数,
追踪下去可发现函数原型。
参数一:定时器结构体。
参数二:回调函数。
参数三:一般给0.
无返回值。
创建完定时器后在需要地方调用下方函数开始计时。
int mod_timer(struct timer_list *timer, unsigned long expires)
参数一:定时器结构体
参数二: jiffies +计数个数(下面详说)
内核定时器的计数依据内核的一个全局变量 jiffies 计数。加入定时器始终频率100HZ,那就是一秒计100个数,计一个数需要10ms,那吗延时20ms就要传入jiffies+2,总的来说jiffies为当前计数值,在此基础上加上等待时间所需要计数的个数。
也可以调用函数计算,等待10ms mod_timer(&timer, jiffies+msecs_to_jiffies(10));
删除定时器
int del_timer(struct timer_list *timer)
参数:定时器结构体
- 定时器结构体
这里面的第二个属性就是 要等待秒数计数的个数。