커 널 타이머 timerlist 사용

Linux 커 널 에 서 는 timer 가 사용 하 는 API 를 제공 하여 간단 한 기 요 를 합 니 다.
1.포 함 된 헤더 파일:linux/timer.h
2.데이터 형식:struct timerlist;
       :
a. data:            ,             ,     timer  。
b. expires:        , linux jiffies   。
c. void (*function)(unsigned long):         。

3.주요 관련 API 함수:
a. init_timer(struct timer_list*):        ;
b. add_timer(struct timer_list*):        ;
c. mod_timer(struct timer_list *, unsigned long jiffier_timerout):           jiffies_timerout;
d. timer_pending(struct timer_list *):       ,               1,    0;
e. del_timer(struct timer_list*):     。

4.시간 과 jiffies 의 변환 함수:
Linux    jiffies   Windows   TickCount,                ,              。   250 jiffies   ,              :HZ。        jiffies       :
unsigned int jiffies_to_msecs(unsigned long);
unsigned int jiffies_to_usecs(unsigned long);
unsigned long msecs_to_jiffies(unsigned int);
unsigned long usecs_to_jiffies(unsigned int);

5.간단 한 예 사용:
  :init_timer->[timer.expires=? & timer.function=?]->add_timer->[mod_timer]->del_timer.
#include 
#include 
#include 
struct timer_list timer;

void timer_handler(unsigned long data) {
    printk(KERN_INFO"timer pending:%d
"
, timer_pending(&timer)); mod_timer(&timer, jiffies+msecs_to_jiffies(1000)); printk(KERN_INFO"jiffies:%ld, data:%ld
"
, jiffies, data); } int timer_init(void) { printk(KERN_INFO"%s jiffies:%ld
"
, __func__, jiffies); printk(KERN_INFO"ji:%d,HZ:%d
"
, jiffies_to_msecs(250), HZ); init_timer(&timer); timer.data = 45; timer.function = timer_handler; timer.expires = jiffies + HZ; add_timer(&timer); printk(KERN_INFO"timer pending:%d
"
, timer_pending(&timer)); return 0; } void timer_exit(void) { printk(KERN_INFO"%s jiffies:%ld
"
, __func__, jiffies); del_timer(&timer); } module_init(timer_init); module_exit(timer_exit); MODULE_LICENSE("GPL");

좋은 웹페이지 즐겨찾기