例子一:
#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) {
int timer_init() {
void timer_exit() {
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);
}
}