?? timer.txt
字號:
any question,send email to netxiong@263.net
相關的文件:
/include/linux/timer.h
/kernel/timer.c
****************************實現機理*************************************************
基本過程如下:
當一個時鐘中斷發生的時候,系統調用timer_interrupt函數,
在這個函數中調用do_timer,do_timer將系統計時器jiffies加一,
同時mark_bh相應的位。更明顯,這里的mark_bh將這個軟中斷連接到tasklet_hi中區。
當處理函數run_all_timer執行的時候,就會調用這個軟中斷。
注意這里有一點和一般的軟中斷不同,
一般的軟中斷是把一個包含處理函數和數據的結構掛接到一定的軟中斷的隊列上的。
所以當系統執行外隊列中的一個元素后就把他從隊列中拿掉。
所以一般的軟中斷沒有顯示的刪除操作。
但是時鐘中斷不同,他是由系統的時鐘中斷處理函數來進行設置的。
二timer的處理方法是設置了一個幾個很大的數組(tvec_base_t),每回用init_timer先生成一個timer,
然后用add_timer連接到這個數組的一項中的list指針后面。當系統執行時,
就掃描這個數組,把那些有timer隊列的數組項的timer取出來進行處理,
但并不把他從系統中刪除。所以,在系統完成之后,要刪除這些項。就是del_timer。
*************************************************************************************
********************************使用方法*********************************************
首先聲明一個struct timer_list(timer_t)型的變量。
例如:struct timer_list jiq_timer;
然后使用init_timer進行初始化
例如:init_timer(&jiq_timer);
然后對變量的屬性進行賦值
例如:jiq_timer.function = jiq_timedout;
jiq_timer.data = (unsigned long)&jiq_data;
jiq_timer.expires = jiffies + HZ; //注意,這里的值一定要是jiffies+XXX的形式
//也就是延遲執行的時間XXX。
然后調用add_timer加入到系統中去
例如;add_timer(&jiq_timer);
最后刪除他(這一步可以省略)
例如:del_timer_sync(&jiq_timer); //主要是防止被信號喚醒,并沒有被處理。
注意;在正常的情況下,加入的timer執行完畢后就被從隊列中刪掉了,
單調用一下del_timer_sync不會產生什么副作用。
*************************************************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -