四点要体侧跑1000米,
跑完回来,太久没运动累屎了
static struct timer_list buttons_timer; //定义定时器结构体
static int sixth_drv_init(void)
{
init_timer(&buttons_timer); //初始化定时器
buttons_timer.function = buttons_timer_function; //定时器服务子函数
//buttons_timer.expires = 0;
add_timer(&buttons_timer); // 激活定时器
。。。。。。。
return 0;
}
static void buttons_timer_function(unsigned long data) //服务子函数
{
}
mod_timer(&my_timer, jiffies+new_delay);
mod_timer()函数也可操作那些已经初始化,但还没有被激活的定时器,如果定时器未被激活,mod_timer()会激活它。如果调用时定时器未被激活,该函数返回0;否则返回1。但不论哪种情况,一旦从mod_timer()函数返回,定时器都将被激活而且设置了新的定时值。
如果需要在定时器超时前停止定时器,可以使用del_timer()函数:
mod_timer(&name, jiffies+HZ/100); //HZ为一秒
struct timer_list my_timer;
接着需要通过一个辅助函数初始化定时器数据结构的内部值,初始化必须在使用其他定时器管理函数对定时器进行操作前完成。
init_timer(&my_timer);
现在可以填充结构中需要的值了(与定时器直接相关的三个参数):
my_timer.expires = jiffies + delay; // 定时器超时时的节拍数
my_timer.data = 0; // 给定时器处理函数传入参数0
my_timer.function = my_function; // 定时器超时时调用的函数
my_timer.expires表示超时时间,它是以节拍为单位的绝对计数值。如果当前jiffies计数等于或大于 my_timer.expires,那么my_function指向的处理函数就会开始执行,另外该函数还要使用长整型参数my_timer.data。
如果你不需要这个参数,可以简单地传递0(或任何其他值)给处理函数。 最后,必须激活定时器:
add_timer(&my_timer);
参考:http://blog.163.com/shi_shun/blog/static/237078492012031491952/
今天大猪头回家了离周三还有三天