1.延时种类
1.1jiffies
全局变量jiffies是用来记录自系统启动以来产生的节拍的总数,Linux核心每隔固定周期会发生一次timer interrupt(IRQ 0),Jiffies会相应的加1
启动时,内核会将该变量初始化为0,此后,每次时钟中断处理程序都会增加该变量的值。
一秒内时钟中断的次数等于HZ,所以jiffies一秒增加的值也就是HZ
1.2 短延时
需要接近或者短与一个jiffies的延时的短延时(大约4ms),可用udelay,mdelay。(实际上是软循环忙等待)
1.3 长延时
可用查询jiffies的方法,如time_after
内核调度超时,schedule_timeout(signed long timeout)
基于等待队列的睡眠超时,sleep_on_timeout(wait_queue_head_t *q, long timeout)
2.实现方法
2.1 查询jiffies方式
int sleep1S(void){ //适合长延时(大于10ms)
long temp = jiffies; //jiffies 每隔1个时钟中断,自动加1
//一般时钟中断位4ms
printk("HZ=%d",HZ);
while(1){
if((jiffies -temp)>HZ) //HZ:1秒钟内时钟中断jiffese的次数
break;
schedule(); //调度:让cpu调度别的进程,我暂时不需要,类似睡眠
}
printk(" sleep1S timeout\ n");
return 0;
}