1.概述
定時器(Timer)本來是硬件資源,但是由linux接管了所有的CPU資源,並對這些資源進行了抽象,那麼我們對Timer的使用就應該按照linux的要求,使用linux提供的接口來使用Timer。
2.使用
初始化
static struct timer_list buttons_timer;//內核定時器結構體
static int Timer_init()
{
init_timer(&buttons_timer);//初始化內核定時器結構體
buttons_timer.function = buttons_timer_function;//內核定時器的超時執行函數
//buttons_timer.expires = 0;//指定超時時刻
add_timer(&buttons_timer);//在內核裏添加定時器
}
按鍵消抖
static irqreturn_t buttons_irq(int irq, void *dev_id)
{
/* 10ms後啓動定時器 */
irq_pd = (struct pin_desc *)dev_id;
mod_timer(&buttons_timer, jiffies+HZ/100);//修改定時器超時時刻
return IRQ_RETVAL(IRQ_HANDLED);
}
按鍵的每次抖動,都進入按鍵中斷處理函數,修改定時器的超時時刻(當前時刻向後延10ms),直到最後一次抖動的10ms後,纔去處理這次的按鍵事件。
3.總結
linux將CPU的所有硬件資源都接管並實現了抽象,屏蔽大量的細節,並提供了一套接口來供開發者使用硬件資源,可以提高開發效率、降低開發難度。