linux驅動中使用定時器的設定

2021-08-07 15:26:21 字數 1737 閱讀 8400

我的核心是2.4.18的。linux的核心中定義了乙個定時器的結構:

#include

struct timer_list

;利用這個結構我們可以在驅動中很方便的使用定時器。

一: timer的api函式:

初始化定時器:

void init_timer(struct timer_list * timer);

增加定時器:

void add_timer(struct timer_list * timer);

刪除定時器:

int del_timer(struct timer_list * timer);

修改定時器的expire:

int mod_timer(struct timer_list *timer, unsigned long expires);

二:使用定時器的一般流程為:

(1)建立timer、編寫超時定時器處理函式function;

(2)為timer的expires、data、function賦值;

(3)呼叫add_timer將timer加入列表;

(4)在定時器到期時,function被執行;

(5)在程式中涉及timer控制的地方適當地呼叫del_timer、mod_timer刪除timer或修改timer的expires。

#include

#include

#include

#include //jiffies在此標頭檔案中定義

#include

#include

struct timer_list mytimer;//定義乙個定時器

void  mytimer_ok(unsigned long arg)

static int __init hello_init (void)

static void __exit hello_exit (void)

module_init(hello_init);

module_exit(hello_exit);

module_author("cxf");

module_license("dual bsd/gpl");

四:交叉編譯後,放到開發板上:

#insmod timer.o

可以發現過一秒後定時器過期函式被執行了,列印出了資訊,250也被正確傳遞

了,呵呵!

#rmmod timer

實驗完成。

五:進一步理解定時器:

在上面的定時器超時函式mytimer_ok(unsigned long arg)中,新增如下

**:mytimer.expires = jiffies+100;//設定超時時間,100代表1秒

mytimer.function = mytimer_ok;//設定定時器超時函式

add_timer(&mytimer); //新增定時器,定時器開始生效

交叉編譯後,放到開發板上

#insmod timer.o

發現每隔一秒,mytimer_ok函式就執行一次,這是因為每次定時器到期後,都

又重新給它設定了乙個新的超時時間,並且新的超時函式指向自己,形成乙個遞

歸,所以就會一直執行下去。

#rmmod timer

可以解除安裝模組,當然列印也就結束了,注意因為定時器超時函式不停的列印資訊

,導致輸入上面的命令時會被定時器超時函式不停的列印資訊淹沒,不用管他,

耐心的把上面的命令輸完就可以成功解除安裝。

linux驅動中使用定時器的設定

linux的核心中定義了乙個定時器的結構 include struct timer list 例如要定義這個結構使用可以這樣 struct timer list testtimer testtimer可隨意命名 利用這個結構我們可以在驅動中很方便的使用定時器。一 timer的api函式 初始化定時器...

linux中使用定時器

1.使用14號訊號sigalrm,呼叫alarm函式 include include include include include void handle int signum int main int argc,const char argv return 0 每隔3秒向自身傳送乙個sigalr...

Linux驅動中定時器的使用

linux timer.h 定義乙個struct timer list的結構體全域性變數,即定時器 static struct timer list buttons timer 初始化該定時器 init timer buttons timer 設定定時器函式,當定時器計數到達時,該函式將被呼叫 bu...