linux定时器实现原理_定时器的工作原理是什么

(3) 2024-06-22 17:12

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] ! 

推测:定时器执行是先延时设置的时间,然后再执行定时器的函数,以此往复

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复