天天看點

核心态延時和定時器

1、jiffies

HZ=100,jiffies=1 means 10ms。

2,延時

unsigned long timeout = jiffies + (3*HZ);

while (hwgroup->busy) {

if (time_after(jiffies, timeout)) {

 return -EBUSY;

 }

}

unsigned long timeout = HZ;

schedule_timeout(timeout); /* Allow other parts of the kernel to run */

短延時:mdelay, udelay, ndelay

3,時間

clock_settime, clock_gettime

do_gettimeofday

time()

localtime()

mktime()

gettimeofday()

3,定時器

#include <linux/timer.h>

struct timer_list my_timer;

init_timer(&my_timer); /* Also see setup_timer() */

my_timer.expire = jiffies + n*HZ; /* n is the timeout in number of seconds */

my_timer.function = timer_func; /* Function to execute after n seconds */

my_timer.data = func_parameter; /* Parameter to be passed to timer_func */

add_timer(&my_timer); /* Start the timer */

其他函數:mod_timer, del_timer

使用者态:setitimer,getitimer

4、高精度定時器

void hrtimer_init(struct hrtimer *timer, clockid_t which_clock, enum hrtimer_mode mode);

timer.function = hr_callback;

int hrtimer_start(struct hrtimer *timer, ktime_t tim,

 const enum hrtimer_mode mode);

int hrtimer_cancel(struct hrtimer *timer);

上一篇: 耦合_wiki
下一篇: gdb參考指令

繼續閱讀