Linux核心定時器-- timer_list
阿新 • • 發佈:2019-01-03
一.概述
核心經常要推後執行某些程式碼,如底半部機制就是為了將工作推後執行。timer_list為我們提供一種方式,使工作能夠在指定時間點上執行。
定時器使用簡單,只須執行一些初始化工作,設定一個超時時間,指定超時發生後執行的函式,然後啟用定時器就可以了。
定時器並不是週期執行的,它在超時後就自行銷燬,這就是這種定時器被稱為動態定時器的原因。動態定時器不斷地建立和銷燬,而且它的執行次數也不受限制。
二.標頭檔案
linux/timer.h
三.結構體資料型別
struct timer_list { struct list_head entry; //定時器連結串列的入口 unsigned long expires; //定時器超時時的節拍數 void (*function)(unsigned long ); //定時器處理函式 unsigned long data; //傳給定時器處理函式的長整型引數 struct tvec_t_base_s *base; //定時器內部值,使用者不要使用 #ifdef CONFIG_TIMER_STATS void *start_site; char start_comm[16]; int start_pid; #endif };
四.函式介面
①主要相關的API函式
init_timer(struct timer_list*):定時器初始化函式;
add_timer(struct timer_list*):往系統新增定時器;
mod_timer(struct timer_list *, unsigned long jiffier_timerout):修改定時器的超時時間為jiffies_timerout;
timer_pending(struct timer_list *):定時器狀態查詢,如果在系統的定時器列表中則返回1,否則返回0;
del_timer(struct timer_list*):刪除定時器
②初始化
struct timer_list my_timer;
init_timer(&my_timer);// 初始化定時器
my_timer.expires = jiffies + delay; //
my_timer.data = 0; //
my_timer.function = my_function; //
add_timer(&my_timer); //最後,啟用定時器
五.使用方法
使用的一般步驟為:
如果要完成周期性的重複工作,只要在初始化的基礎上,在超時函式my_function內部加上以下程式碼,重新更新引數
my_timer.expires = jiffies + delay; //
my_timer.data = 0; //
my_timer.function = my_function; //
add_timer(&my_timer); //啟用定時器
這樣就能實現週期執行my_function函數了