Linux核心定時器的使用

2021-07-14 04:13:21 字數 1206 閱讀 4526

核心定時器的結構體定義在include/linux/timer.h:

struct timer_list ;
只需初始化定時器的超時時間expires,超時呼叫函式function,data成員會作為定時器超時函式的引數傳遞,驅動可以用data來儲存自己的私有資料結構位址。下面是定時器應用的乙個例項:

驅動的私有資料結構:

struct msg21xx_ts_data ;
驅動的probe函式:

static int msg21xx_ts_probe(struct i2c_client *client,

const struct i2c_device_id *id)

init_timer(&data->tp_timer);

data->tp_timer.function = tp_timer_function;

data->tp_timer.data = (unsigned long)data;

// setup_timer(&tp_timer, tp_timer_function, (unsigned long)data);

add_timer(&data->tp_timer);

mod_timer(&data->tp_timer, jiffies+hz * 2);

}

呼叫init_timer初始化定時器,然後設定定時器的超時呼叫函式,data成員被初始化為驅動的私有資料結構的位址,最後呼叫add_timer將定時器加入核心,呼叫mod_timer後,定時器會在2秒後超時,tp_timer_function函式被呼叫,data作為函式的引數被傳入,在tp_timer_function函式中,就可以操作驅動的硬體。

void tp_timer_function(unsigned long datap)

下面的三條語句可以用一條代替:setup_timer(&tp_timer, tp_timer_function, (unsigned long)data);

init_timer(&data->tp_timer);

data->tp_timer.function = tp_timer_function;

data->tp_timer.data = (unsigned long)data;

linux 核心 核心定時器

一.時鐘中斷概念 1.時鐘中斷由系統的定時硬體以週期性的時間間隔產生,這個間隔 即頻率 由核心根據hz來確定,hz是乙個與體系結構無關的常數,可配置 50 1200 在x86平台上預設值是1000 2.每當時鐘中斷發生的時候,全域性變數jiffies unsigned long 就加1,所以jiff...

linux核心定時器

度量時間差 時鐘中斷由系統的定時硬體以週期性的時間間隔產生,這個間隔 頻率 由核心根據hz來確定,hz是乙個與體系結構無關的常數,可配置 50 1200 在x86平台,預設值為1000.每秒鐘產生1000次時鐘中斷 每當時鐘中斷發生時,全域性變數jiffies就加1,因此其記錄了自linux啟動後時...

Linux 核心定時器

include include include include struct timer list my timer void func unsigned long data printk time out n data ld,pid ld n data,current pid mod timer ...