最近在做项目中,做一个充电指示灯,需要在内核延时,当时直接使用mdelay(1000);导致后面CPU占用率高达12%左右。后来了解发现这个函数是一个相当于for函数一直循环的函数,一直占用CPU,没有让出CPU使用权。而msleep可以把系统的CPU使用权让出来。解决了这个问题。
#include
1、unsigned int
sleep(unsigned int seconds);秒级
2、int
usleep(useconds_tusec);
微秒级:1/10^-6
内核层:
include
1、void
ndelay(unsigned longnsecs);
纳秒级:1/10^-10
2、void
udelay(unsigned longusecs);
微秒级: 1/10^-6
3、void
mdelay(unsigned longmsecs);
毫秒级:1/10^-3
sleep_on(), interruptible_sleep_on();
sleep_on_timeout(),interruptible_sleep_on_timeout();
根据你的情况选用这些函数,注意: sleep操作在kernel必须小心、小心。。。
udelay()等函数是cpu忙等,没有传统意义上的sleep。这些函数相当于我们平时的阻塞读、写之类的语义,主要用于等外设完成某些操作