android 4.4.2
linux版本:3.0以上
@1:ndelay,udelay,mdelay 這個三個函數類似於單片機中的死循環計數,到達所定的時間時,達到延時的目的。需要注意的是一般常用的是udelay,以及mdelay,但是udelay和mdealy一般都有限制的時間,比如規定最大的時間。
#define udelay(n)\
(__builtin_constant_p(n) ?\
((n) > (MAX_UDELAY_MS * 1000) ? __bad_udelay() :\
__const_udelay((n) * UDELAY_MULT)) :\
__udelay(n))
MAX_UDELAY_MS就是延遲的最大的時間,當延時的時間大於MAX_UDELAY_MS時,會發出警告,有的甚至直接編譯時就報錯
/* Undefined functions to get compile-time errors */
extern void __bad_udelay(void);
@2:
msleep,msleep_interuptible,ssleep這幾個函數的調用有1個好處是調用這個函數之后,當前進程會被置於睡眠的狀態,其中第一個顯然和第二個的區別是否可以中斷喚醒,第二個是可以的,第一個是不可喚醒的。而對於第3個來講,ssleep的延時時間是以秒S計算的,而且中斷不可喚醒。