Hrtimer定时器以及等待队列的使用

来源:互联网 发布:淘宝蓝钻和黄钻的区别 编辑:程序博客网 时间:2024/06/05 17:30

简单粗暴直接上代码(可直接在linux驱动中使用,方便调试):

#include<linux/kthread.h>

Static unsigned int usb_flag=0;

Static DECLARE_WAIT_QUEQUE(thermal_value_waiter);

Static DECLARE_WAIT_QUEQUE(thermal_kthread_waiter);

Static struct hrtomer usb_thermal_timer;

Static struct task_struct *usb_thermal_kthread;

 

Int usb_thermal_kthread_handler(void *unused)

{

Ktime_t ktime;

do{

Ktime=ktime_set(20000/1000000,(20000%1000000)*1000);

Wait_event_interruptible(thermal_kthread_waiter,usb_flag==1);

usb_flag==1;

{

.......

....... //定时执行代码

}

Hrtimer_start(usb_thermal_timer,ktime,HRTIMER_MODE_REL);

}while(!kthread_should_stop());

Return 0;

}

 

Enum hrtimer_restart usb_thermal_timer_func(struct hrtimer *timer)

{

Usb_flag=1;

Wake_up_interruptible(&thermal_kthread_waiter);

Return HRTIMER_NORESTART;

}

 

Void usb_thermal_sw_workaround_init(void) //可以放在probeinit

{

Ktime_t ktime;

Ktime=ktime_set(20000/1000000,(20000%1000000)*1000);

Hrtimer_init(&usb_thermal_timer,CLOCK_MONOTONIC,HRTIMER_MODE_REL);

Usb_thermal_kthread=kthread_run(usb_thermal_kthread_handler,0,”usb_thermal_kthread”);

Hrtimer_start(&usb_thermal_timer,ktime,HRTIMER_MODE_REL);

}

个人总结,请勿转载

原创粉丝点击