核心軟定時器

2021-08-21 21:08:46 字數 1287 閱讀 3626

linux核心軟體定時器

1.linux核心描述定時器使用的資料結構

struct timer_list ;

如何使用核心定時器?

1.分配定時器物件

struct timer_list mytimer;

2.初始化定時器物件

init_timer(struct timer *timer);

函式功能:初始化定時器

引數:分配的定時器物件指標

注意:這個函式不會初始化expires,function,data這個三個字段,這三個字段需要程式設計師自己去指定,例如:

init_timer(&mytimer);

mytimer.expires = jiffies + 5*hz

mytimer.function = mytimer_funtion;

mytimer.data = (unsigned long)&mydata;

3.向核心新增註冊定時器

add_timer(&mytimer); //一旦新增完畢,核心就開始對這個定時器進行倒計時!時鐘中斷處理函式每隔10ms檢查一次定時器是否到期,如果到期,核心執行對應的定時器處理函式,並且將定時器進行刪除。

4.刪除定時器

del_timer(&mytimer); //定時器到期,核心會幫你刪除定時器,如果定時器沒到期,可以使用此方法進行刪除。

5.修改定時器的超時時間

mod_timer(&mytimer, jiffies + 2*hz); //設定定時器的超時時間為2秒以後

相當於= del_timer 先將原先定時器刪除 

+ expires = jiffies + 2*hz  設定新的超時時間

+ add_timer  重新新增定時器

注意:千萬不能用以上三步驟來實現mod_timer,以上三步驟的執行路徑不是原子的,有可能被打斷!

6.注意:定時器的實現基於軟中斷,所以定時器的處理函式同樣不能進行休眠操作!

7.如果想讓定時器的處理函式重複執行,迴圈執行,只需在定時器處理函式中重新新增定時器即可!

實驗步驟:

insmod mytimer_drv.ko speed = 2000 //2秒閃爍

echo 500 > /sys/module/mytimer_drv/parameters/speed //500ms

毫秒和jiffies轉換:

unsigned long timeout = jiffies + msecs_to_jiffies(500);

unsigned long timeout = jiffies + hz/2;

核心定時器

linux核心2.4版中去掉了老版本核心中的靜態定時器機制,而只留下動態定時器。相應地在timer bh 函式中也不再通過 run old timers 函式來執行老式的靜態定時器。動態定時器與靜態定時器這二個概念是相對於linux核心定時器機制的可擴充套件 功能而言的,動態定時器是指核心的定時器佇...

核心定時器

核心中最終的計時資源是定時器。定時器用於定時器超時處理程式在未來某個特定時間點執行,或者週期性的輪詢硬體的狀態。linux提供了核心定時器完成這類工作。定 時器的只需要執行一些初始化的操作,如 設定乙個超時時間,指定超時要呼叫的函式,然後啟用定時器就可以了。它的處理和工作佇列還是有點類似的。和任務隊...

核心定時器,

ldd3 當定時器執行時 排程該定時器的程序可能正在睡眠,或在其它處理器上執行,或乾脆推出。沒有執行定時器,排程它的程式推出了,定時器該如何?2.6.35。22核心 gcc 4.4.5 include include include include include include include i...