Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
linux定时器实现原理_定时器的工作原理是什么,希望能够帮助你!!!。
在中断函数中设置定时时间:
static irqreturn_t key_interrupt(int irq, void *dev_id) { mod_timer(&key.timer, jiffies + msecs_to_jiffies(3000)); printk("in the interrupt !\r\n"); return IRQ_HANDLED; }
在定时器函数中增加相关打印:
static void key_timer_function(struct timer_list *arg) { static int last_val = 1; unsigned long flags; int current_val; spin_lock_irqsave(&key.spinlock, flags); printk("timer function start ! \n"); current_val = gpio_get_value(key.key_gpio); if(0 == current_val && last_val) { printk("status = KEY_PRESS[%d] ! \n", current_val); status = KEY_PRESS; } else if(1 == current_val && ! last_val) { printk("status = KEY_RELEASE[%d] ! \n", current_val); status = KEY_RELEASE; } else { printk("status = KEY_KEEP[%d] ! \n", current_val); status = KEY_KEEP; } last_val = current_val; printk("timer function end[%d] ! \n", current_val); spin_unlock_irqrestore(&key.spinlock, flags); }
在内核中加载模块时,发现:
中断先执行:
in the interrupt ! in the interrupt !
然后3秒后会进到定时器函数执行:
timer function start ! status = KEY_KEEP[1] ! timer function end[1] !
推测:定时器执行是先延时设置的时间,然后再执行定时器的函数,以此往复
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章