现在的位置: 首页 > 综合 > 正文

linux定时器Timer的用法

2013年10月09日 ⁄ 综合 ⁄ 共 1822字 ⁄ 字号 评论关闭

例子一:

#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);
     }
}

        

 
 
 
 
 

抱歉!评论已关闭.