linux定時器的使用

2021-10-23 14:47:36 字數 2012 閱讀 5504

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.ko

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

#rmmod timer.ko

我們也可以用lsmod | grep timer 來檢視是否載入了timer驅動。

可以用dmesg | tail -20 檢視驅動列印的資訊

dmesg -c 清楚資訊

五:進一步理解定時器:

在上面的定時器超時函式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內部的三個定時器,另乙個是用sleep,usleep函式讓程序睡眠一段時間,使用alarm定時發出乙個訊號,還有那就是用gettimeofday,...

linux定時器的使用

使用定時器的目的無非是為了週期性的執行某一任務,或者是到了乙個指定時間去執行某乙個任務。要達到這一目的,一般有兩個常見的比較有效的方法。一 個是用linux內部的三個定時器,另乙個是用sleep,usleep函式讓程序睡眠一段時間,其實,還有乙個方法,那就是用gettimeofday,difftim...

linux定時器的使用

使用定時器的目的無非是為了週期性的執行某一任務,或者是到了乙個指定時間去執行某乙個任務。要達到這一目的,一般有兩個常見的比較有效的方法。乙個是用linux內部的三個定時器,另乙個是用sleep,usleep函式讓程序睡眠一段時間,其實,還有乙個方法,那就是用gettimeofday,difftime...