linux定时器Timer的用法

时间:2021-10-28 23:27:41

例子一:

#include<linux/kernel.h>

#include<linux/module.h> #include<linux/init.h> #include<linux/timer.h> #include<linux/uaccess.h>  
MODULE_LICENSE("GPL"); MODULE_AUTHOR("James"); MODULE_DESCRIPTION("Timer Module");
struct timer_list timer;
void timer_func(int data) {   printk("<0>Timer Expired and para is %d!!\n",data); }

int timer_init() {   init_timer(&timer);   //定时器初始化   timer.data=10;        //设置超时处理函数参数   timer.expires=jiffies+(10*HZ);   //设置超时jiffies值为10s     timer.function=timer_func; //设置超时处理函数   add_timer(&timer);      //添加定时器到内核   return 0; }

void timer_exit() {   del_timer(&timer);   //删除定时器 }
module_init(timer_init); module_exit(timer_exit);   —————————————————————————————————        定时器我在BCM代码的U盘读写时控制LED灯时用过,感觉还可以。就是有一点要注意,我当时是在定时器函数中检查变量A,如果A为1,则继续调用定时器。          此时一定要注意,在下一次调用的时候,应该把前一次的定时器delete掉。          加一个定时器:           //add a timer; 
       init_timer(&transfer_timer);
       transfer_timer.expires = jiffies + (2 * HZ);
       transfer_timer.data = (unsigned long) 10;  
       transfer_timer.function = usb_light_timer_funcation;
       add_timer(&transfer_timer);
         下面是我的定时器处理函数:      

void usb_light_timer_funcation(unsigned long  p_data)
{
     printk( "*******    enter  usb_light_timer_funcation!  ********\n" );
  
      if(timer_blink_flag == 1)       
     {
         timer_blink_flag = 0;  
         del_timer(&transfer_timer);
         // 这里一定要先删除再加新定时器,不然系统就有问题了。 


         init_timer(&transfer_timer);
         transfer_timer.expires = jiffies +  (2 * HZ);
         transfer_timer.data = (unsigned long)10;
         transfer_timer.function = usb_light_timer_funcation;
         add_timer(&transfer_timer);
         printk( "*******  usb_light_timer_funcation:  renew  the timer !  ********\n" );
     } 
     else 
     {
         del_timer(&transfer_timer);
         printk( "*******  usb_light_timer_funcation:  delete  the timer !  ********\n" );

         usb_flag = 0;
         kerSysLedCtrl((BOARD_LED_NAME)( kLedUsb1), kLedStateOn);
     }
}