我是靠谱客的博主 优雅小土豆,最近开发中收集的这篇文章主要介绍linux定时器Timer的用法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

例子一:

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

        
 
 
 
 
 

最后

以上就是优雅小土豆为你收集整理的linux定时器Timer的用法的全部内容,希望文章能够帮你解决linux定时器Timer的用法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部